2012-11-22 9 views
9

İlk başta, CascadeType.REMOVE ile tablosumdaki yabancı anahtarları silebileceğimi bekledim, ancak bir istisna aldım. Ama @CascadeOnDelete ile sorun değil. İki ek açıklama arasındaki fark nedir?@CascadeOnDelete ve CascadeType.REMOVE ek açıklamaları arasındaki fark nedir?

DÜZENLEME: Ben .Hangi fikri kullanılacak ne kadar iyi sorusunu gündeme org.eclipse.persistence.annotations.CascadeOnDelete gelen silme üzerinde DataNucleus' comment.Cascade gördü ettik.

+1

Hangi özel durumları aldınız? – Ilya

+1

@CascadeOnDelete, JPA'nın bir parçası değildir, bu nedenle – DataNucleus

+1

numaralı telefonun nereden geldiğinden bahsetmenizi öneriyoruz: 'XXX' tablosundaki DELETE 'anahtarında' 'YYY' 'için bir anahtar ihlali ihlaline neden olmuştur (xxx). İfade geri çekildi. ' – npocmaka

cevap

6

CascadeType.Remove'u kullandığınızda, geçiş işlemi ORM aracı tarafından işlenecektir, ancak basamaklandırmanın veritabanı tarafından işlenmesini istediğinizde, @CascadeOnDelete kullandığınızda @ CascadeOnDelete.but kullanabilirsiniz. Kullandığınız Veritabanı basamaklandırmayı desteklemelidir.

+0

Teşekkürler. Bu mümkün değilse CascadeOnDelete önlemek için daha iyi olduğu anlamına gelir .... – npocmaka

+3

Bu sizin kodunuzu kesinlikle JPA belirtimi ile uyumlu olmasını istiyorsanız onu nasıl kullandığınıza bağlıdır. CascadeOnDelete kullanmamalısınız.Ama eğer JPA sağlayıcınızı değiştirmeyecekseniz CascadeonDelete'yi kullanmak yararlı olabilir. Daha fazla bilgi için [link] 'e bakabilirsiniz (http://wiki.eclipse.org/EclipseLink/Examples/JPA/DeleteCascade) –