spring data jpa 關聯查詢返回自定義物件
阿新 • • 發佈:2019-01-02
@Override
public List<SimpleRights> getListByOperatorId(int operatorId) {
EntityManager em = entityManagerFactory.createEntityManager();
try {
List<Rights> list;
Query query = em.createNativeQuery("select r.id,r.rightName,r.iconCls,r.fartherId,r.orderIndex," +
"r.urlPath,r.needLimit,r.rightType" +
" from t_xfw_rights r " +
"inner join t_xfw_operator_rights x on r.id=x.right_id " +
"where x.user_id=? ",Rights.class);
query.setParameter(1, operatorId);
list = query.getResultList();
List<SimpleRights> tmp =new ArrayList<>();
for(int i=0;i<list.size();i++){
tmp.add(list.get(i).toSimpleRights());
}
return tmp;
} catch (Exception e) {
throw e;
} finally {
em.close();
}
}
Rights 物件有關聯關係,在action中返回json時回出現session關閉錯誤,所以轉換成SimpleRights物件,這個方法是查詢某個使用者的許可權集合,Rights中有List,所以在返回的時候,jpa會再懶載入這個列表,但在控制器中這個資料庫session已關閉,就出錯了,新建一個SimpleOperator物件,裡面加上List屬性,就可以政策返回。
上邊通過createNativeQuery建立一個本地關聯查詢,自動對映到Rights物件上,然後手動轉到SimpleRights,再返回,轉換物件會有效率問題,所以不適合大資料量操作。