私は、JPAを使用してDBにアクセスするJSFアプリケーションを構築してきました。いくつかのエンティティがあります。
テーブル内の複数のエンティティの列を表示する検索結果画面を作成したいと思います。これらのエンティティには、外部キーの関係はありません。
これを実現するために、私はEnttityManager.createNativeQueryを使用し、次のようにEntityMappingを指定しました。
Query q = em.createNativeQuery(
"select t.id as id1, t.bb as bb1, t.cc as cc1," +
"t2.id as id2, t2.aa as aa2, t2.bb as bb2 " +
" from table1 t, table2 t2 where t.cc = '22' and t2.id = 2", "TestMapping");
result = q.getResultList();
TestMappingは次のようになります。
@SqlResultSetMapping(name =
"TestMapping", entities = {
@EntityResult(entityClass = Table1.class, fields = {
@FieldResult(name = "id", column = "id1"),
@FieldResult(name = "bb", column = "bb1"),
@FieldResult(name = "cc", column = "cc1")}
),
@EntityResult(entityClass = Table2.class, fields = {
@FieldResult(name = "id", column = "id2"),
@FieldResult(name = "aa", column = "aa2"),
@FieldResult(name = "bb", column = "bb2")}
)
} )
これは、クエリで両方のエンティティからすべての列名を指定した場合に機能します。これはこの小さな例では問題ありませんが、検索結果は4つのエンティティから選択する必要があり、すべてに多数の列があります。EntityMappingのすべての列を指定しないと、getResultList()の呼び出しで例外がスローされます。
私の質問はこれです:エンティティからすべてを指定する必要はなく、クエリで選択されたEntityMappingの列のみを指定することは可能ですか?