2010-11-23 20 views
6

私は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にアップグレードしても問題は解決しません。

+1

これを解明しましたか?私は同じことをしようとしている。私のクエリでは、返されるのは親行だけですが、子行も返されます。 –

+0

この質問の更新情報はありますか?これは、この@gerryの回答が見つかりましたか –

答えて

8

TABLE_PER_CLASSの継承と組み合わせて、型の式は、EclipseLinkは2.1.1の下に」トンの仕事をdoesnのEclipseLinkののバージョンがJPA 2.0をサポートしている場合、あなたは

SELECT p FROM Parent p WHERE TYPE(p) = Parent 
関連する問題