2010-01-14 13 views
6

EclipseLink JPA uygulamasıyla JOINED devralma stratejisini kullanıyorum. EclipseLink'in veritabanı şemasına varsayılan DTYPE adlı bir diskriminator sütunu eklediğini fark ettim. Anlıyorum ki, bir tablo miras stratejisi için bu ayrımcıya ihtiyaç var, fakat neden JOINED stratejisi için?Neden EclipseLink, birleşik miras stratejisi için ayrımcı sütunu ekliyor?

EclipseLink bu sütuna ihtiyacı vardır, çünkü kaldırdıktan sonra hatalarım var. Bu sütun performans nedenleri, vb. Için eklenmiş mi? Bu konuda özellikle şüphe duymadım çünkü veritabanı şeması açısından bu sütun sadece gereksiz dağınıklıktır.

Hazırda beklemede olan JPA benzer bir şey yapmaz. Joined Table Inheritance itibaren

+0

Belki de sorunuzda bir hata yaptınız. Eğer JOINED ... – cletus

cevap

1

: katılmış tablo miras olarak

, kök tablosundan her sınıf hisse verileri. Ayrıca, her bir alt sınıf, genişletilmiş durumunu ekleyen kendi tablosunu kendi tablosunu tanımlar.

...

ayırt edici sütun tablo katıldı neyi böylece türünü belirler ve ne: Aşağıdaki örnek de iki tablolar, PROJE ve L_PROJECT, iki sıra sınıfları, Project ve LargeProject gösterir kullanmak için üst tabloda bir ayrımcı sütuna ihtiyacınız var.

+4

Tam olarak neden olmasın ve neden anlamak istediğimi anladığınızı söylüyorsunuz: EclipseLink neden bu ayrımcı kolonu kullanıyor? - gerekli değil, JOINED stratejisi, yabancı anahtarlar arasındaki ilişkiyi temel alıyor. sınıflar. JPA spesifikasyonu, diskriminatörün JOINED stratejisi için isteğe bağlı olduğunu söylüyor - Hazırda bekletme JPA bunu örneğin kullanmıyor - ve EclipseLink'in yaptığı gibi, kullanmanın avantajının ne olduğunu öğrenmek istiyorum. –

+0

Sanırım http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html#inheritance-tablepersubclass adresine atıfta bulunuyorsunuz. ExlipseLink Sanırım bu konuda sadece açık. Ayırıcı sütun, uygun alt sınıfı bulmak için EXISTS (veya benzer) kontrolleri yapma problemini ortadan kaldırır. Opsiyonel olsa bile, hala kullanıyorum. – cletus

+0

Bu mantıklı, ayrımcı kesinlikle şeyleri hayata geçirmeyi kolaylaştırıyor. Cevabınız için teşekkürler! –