我们正在尝试从Spring Boot 1.5.x迁移到2.0.x
以下是用于使用Spring Boot 1.5.x作为List>获得选择结果的代码:
public List<Map<String, Object>> findZipCodeAndCityByState(String state) {
String sql = "SELECT DISTINCT z.city, z.zip_code FROM zip_code z WHERE z.state = :state";
Query qr = entityManager.createNativeQuery(sql);
qr.setParameter("state", state);
// BELOW LINES WILL GIVE US THE MAP OF PROPERTIES
org.hibernate.Query hibernateQuery = ((org.hibernate.jpa.HibernateQuery) qr).getHibernateQuery();
hibernateQuery.setResultTransformer(AliasToEntityOrderedMapResultTransformer.INSTANCE);
return qr.getResultList();
}
但是当我们尝试迁移到2.0.x时,要知道org.hibernate.Query和hibernateQuery.setResultTransformer()均已弃用。
如何在Spring Boot 2.0中以List>的形式获得选择结果?
答案 0 :(得分:0)
您有以下选择:
使用Hibernate的ResultSetTransformer继续。如果JPA规范中存在丑陋的等价功能,则不建议使用某些Hibernate功能,但是当使用Hibernate API为您提供更多JPA功能时,您可以轻松找到很多地方。建议不要在自己的Query
上致电unwrap
改为使用List<Tuple>
。要使用Tuple,您需要使用createNativeQuery的重载版本,并将Tuple.class
作为结果类传递
使用DTO投影
一篇很好的文章,总结了所有三种方法: The best way to map a projection query to a DTO (Data Transfer Object) with JPA and Hibernate