我一直在使用JPA構建一個JSF應用程序來訪問數據庫。有一些實體。從多個表中讀取並使用JPA填充多個實體SqlResultSetMapping
我想創建一個搜索結果屏幕,顯示來自表中多個實體的列。這些實體沒有外鍵關係。
爲了實現這一點,我已經使用了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中的列,而不必從實體中指定全部?