私はJPAプロバイダとしてEclipseLinkを使用しています。また、私は JPA TABLE_PER_CLASS継承:スーパークラスエントリのみを選択する方法?
@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
}
を次TABLE_PER_CLASSの継承構造を使用している問題は、今、私は唯一の親クラスのエントリを受信したいということです。しかし、 "SELECT p FROM Parent p"という名前のクエリでは、子テーブルのすべてのエントリも返されます。次のように
選択またはコードを見つけることである:
public List findWithNamedQuery(String query) {
return em.createNamedQuery(query).getResultList();
}
これによりクエリが「親PからPを選択」、すなわちあります。
本当に親エントリだけを受け取ることができ、この継承階層のすべてのエントリを受け取ることはできませんか?
要するに、すべての子エントリをそのままにして、親エントリのみを返すにはどうすればいいですか?
EDIT 1:
私はのEclipseLink 2.0.1を使用していますが、私は型の式を経てaxtavtのソリューションをしようとするたびに、私は次のエラーを取得する:
"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".
私も更新しましたEclipseLinkの最新の安定版2.1.1にアップグレードしても問題は解決しません。
これを解明しましたか?私は同じことをしようとしている。私のクエリでは、返されるのは親行だけですが、子行も返されます。 –
この質問の更新情報はありますか?これは、この@gerryの回答が見つかりましたか –