java - Hibernate:使用别名获取列

标签 java hibernate jpa orm

考虑这个简单的查询:

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")})
})

columnOnecolumnTwo 是在 native 查询的 select 子句中声明的别名。

最后在查询创建中使用:

List<ResultClass> results = em.createNativeQuery(query, "ResultMapping").getResultList();

在我看来,这是更优雅和“更高级别”的解决方案,因为您使用的不是通用映射键/值对,而是具体的 POJO 类。

关于java - Hibernate:使用别名获取列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44583844/

相关文章:

java - ArrayList 和 java.lang.OutOfMemoryError

java - 如何在多对多关系中使用 hibernate 和 JPA 删除孤立实体?

java - 使用 jpa 在对象中保留对象

java - 使用 hibernate 持久化到 mysql 时出错

java - 未定义 [javax.persistence.EntityManager] 类型的唯一 bean

java - 在 Play 框架和 Django 之间共享 session

java - 使用正则表达式从java中的逗号分隔字符串中提取特定单词

java - 如何以人类可读的格式显示 BigDecimal 值?

java - 具有主 ID 和修订 ID 的 Hibernate 实体

java - Eclipselink:使用级联 DELETE 删除嵌入的 @OneToOne