Spring Data Jpa使用——select查询2个字符串进行封装Map处理
开发环境
- 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;
}