JPAプロバイダーとしてEclipseLinkを使用しています。さらに、次の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
}
問題は、親クラスのエントリのみを受け取りたいということです。ただし、名前付きクエリ「SELECT p FROM Parent p」を使用すると、子テーブルのすべてのエントリも返されます。
選択または検索コードは次のとおりです。
public List findWithNamedQuery(String query) {
return em.createNamedQuery(query).getResultList();
}
これにより、クエリは「SELECT pFROMParentp」になります。
この継承階層のすべてのエントリではなく、実際に親エントリのみを受信するにはどうすればよいですか?
つまり、すべての子エントリをそのままにして、親エントリのみを返すにはどうすればよいですか?
編集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にも更新しましたが、問題は解決しません。