2010-11-23 21 views
6

EclipseLink'i JPA sağlayıcısı olarak kullanıyorum. Ayrıca aşağıdaki TABLE_PER_CLASS miras yapısınıJPA TABLE_PER_CLASS devralma: Yalnızca süper sınıf girişlerini SELECT nasıl?

@javax.persistence.Entity 
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 
@NamedQueries({ 
    @NamedQuery(name=Parent.QUERY_FIND_ALL, query="SELECT p FROM Parent p") 
}) 
public class Parent { 
     // the class code follows here 
} 

@javax.persistence.Entity 
@NamedQueries({ 
    @NamedQuery(name=Child.QUERY_FIND_ALL, query="SELECT c FROM Child c") 
}) 

public class Child extends Parent { 
     // the class code follows here 
} 

sorun kullanıyorum şimdi sadece ebeveyn sınıfın girişlerini almak istediğiniz olmasıdır. Ancak "SELECT p FROM Parent p" adlı sorgu ile alt tablodaki tüm girişler de döndürülür. aşağıdaki gibi

seçme ya da bulabilirsiniz kodudur:

public List findWithNamedQuery(String query) { 
     return em.createNamedQuery(query).getResultList(); 
} 

Bu şekilde, sorgu, yani "Ana P'den SEÇİMİ s" dir.

Bu inheritacne hiyerarşisinin tüm girdilerini değil, yalnızca ana girdileri nasıl alabilirim?

Kısaca: Tüm alt girdileri el değmeden nasıl bırakabilirim ve yalnızca ana girişleri geri alabilir miyim?

DÜZENLEME 1:
Ben EclipseLink 2.0.1 kullanıyorum, ama her zaman, tip ifadesi yoluyla axtavt en çözümü deneyin aşağıdaki hatayı alıyorum:

"Invalid Type Expression on [my.domain.Parent]. The class does not have a descriptor, or a descriptor that does not use inheritance or uses a ClassExctractor for inheritance". 

Ben de güncelledik EclipseLink'in en son kararlı sürüm 2.1.1'ine kadar, ancak sorunu çözmüyor.

+1

cevabı Hiç bu anlamaya mı Ayrıca bkz? Ben de aynı şeyi yapmaya çalışıyorum. Sorgum için yalnızca üst satırların döndürülmesini istiyorum ancak çocuk satırları da döndürülüyor. –

+0

Bu sorudaki herhangi bir güncellemeyi mi arıyorsunuz? –

cevap

8

EclipseLink sürümünüz JPA 2.0 destekliyorsa, TABLE_PER_CLASS miras ile birlikte Tip ifadesi EclipseLink 2.1.1 altında tatmin etmiyorsun

SELECT p FROM Parent p WHERE TYPE(p) = Parent 
İlgili konular