1. 程式人生 > >spring data jpa 關聯查詢返回自定義物件

spring data jpa 關聯查詢返回自定義物件

 @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,再返回,轉換物件會有效率問題,所以不適合大資料量操作。