考虑这个简单的查询:
SELECT 1 as first, 2 as second
当使用 Hibernate 时,我们可以做类似的事情:
em.createNativeQuery(query).fetchResultList()
但是,似乎没有办法获得别名(或列名)。这对创建 List<Map<String, Object>>
非常有帮助其中每个 map 将是一行及其别名,例如在这种情况下:[{first: 1, second: 2}]
.
有没有办法做这样的事情?
最佳答案
我会建议一些不同的方法来满足您的需求。
在 JPA 2.1 中有一个称为“结果集映射”的功能。
基本上你必须定义一个 POJO 类来保存结果值(所有值都必须使用构造函数传递):
public class ResultClass{
private String fieldOne;
private String fieldTwo;
public ResultClass(String fieldOne, String fieldTwo){
this.fieldOne = fieldOne;
this.fieldTwo = fieldTwo;
}
}
然后你必须在你的一个实体上声明映射(无论在哪个实体上,它只需要是声明的@Entity):
@SqlResultSetMapping(name="ResultMapping", classes = {
@ConstructorResult(targetClass = ResultClass.class,
columns = {@ColumnResult(name="columnOne"), @ColumnResult(name="columnTwo")})
})
columnOne
和 columnTwo
是在 native 查询的 select 子句中声明的别名。
最后在查询创建中使用:
List<ResultClass> results = em.createNativeQuery(query, "ResultMapping").getResultList();
在我看来,这是更优雅和“更高级别”的解决方案,因为您使用的不是通用映射键/值对,而是具体的 POJO 类。
关于java - Hibernate:使用别名获取列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44583844/