JPA table_per_class継承:スーパークラスエントリのみを選択する方法は?

StackOverflow https://stackoverflow.com/questions/4256393

質問

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
}

問題は、親クラスのエントリのみを受け取りたいということです。ただし、名前付きクエリ「Parent PからPを選択する」では、子テーブルからのすべてのエントリも返されます。

選択または検索コードは次のとおりです。

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

それにより、クエリは「親pからpを選択する」です。

このinternitacne階層のすべてのエントリではなく、親のエントリのみを実際に受信するにはどうすればよいですか?

要するに、すべての子供のエントリを触れずに残し、親エントリのみを返すにはどうすればよいですか?

編集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の最新のStableバージョン2.1.1にも更新しましたが、問題は解決しません。

役に立ちましたか?

解決 2

table_per_class継承と組み合わせた型式は、eclipselink 2.1.1の下では機能しませんが、これはバグのようです。

の答えも参照してください JPA 2.0:式例外と入力します

他のヒント

EclipsElinkのバージョンがJPA 2.0をサポートしている場合、書くことができます

SELECT p FROM Parent p WHERE TYPE(p) = Parent
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top