開發環境
- Spring Boot 2.4
- Hibernate 5.4
- Spring Data Jpa 2.2
背景
- 在一次查詢中,需要使用group by 對查詢數據分組查詢,返回兩個字符串類型的數據。使用Spring Data Jpa操作,沒有找到解封裝成List對象的方法,后來使用的Hibernate進行實現。
實現方法
- 使用的查詢SQL如下
select f.farm_uid as farmUid,f.client_user_mid as clientUserMid from m_shelf_info f group by f.client_user_mid,f.farm_uid
- 最終代碼如下
/**
* 獲取場地和客戶
*/
public List<ShelfInfoTable> getFarmAndCustomerQuery(){
Query query = entityManager.createNativeQuery("select f.farm_uid as farmUid,f.client_user_mid as clientUserMid from m_shelf_info f group by f.client_user_mid,f.farm_uid");
//將查詢結果中的每一個對象轉成map
query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
List rows = query.getResultList();
List<ShelfInfoTable> shelfInfoTableList = new LinkedList<>();
for (Object obj : rows) {
Map<String,String> row = (Map<String,String>) obj;
//封裝想要的實體
ShelfInfoTable shelfInfoTable = new ShelfInfoTable();
shelfInfoTable.setFarmUid(row.get("farmUid"));
shelfInfoTable.setClientUserMid(row.get("clientUserMid"));
shelfInfoTableList.add(shelfInfoTable);
}
return shelfInfoTableList;
}