java - 将 Hibernate 查询结果映射到对象

标签 java sql hibernate mapping

我有两门课:

public class User {
    String name;
    String surname;
}

public class ValueDto {
    User user;
    Integer value;
}

我的查询代码:

String queryText = "SELECT DISTINCT a.* AS user, b.value AS value FROM TABLE_A a, TABLE_B b";
SQLQuery sqlQuery = aSession.createSQLQuery( queryTxt );
sqlQuery.addScalar( "value", IntegerType.INSTANCE );
sqlQuery.setResultTransformer( Transformers.aliasToBean( ValueDto.class ) );
return sqlQuery.list();

问题是获取一个.* AS用户,其中user是另一个类。我尝试了 addEntity 方法、addScalar 以及其他一些我不记得的方法,还尝试在互联网上找到解决方案,但没有成功。我完全不知道如何让它发挥作用。任何帮助将不胜感激。

最佳答案

您可以将构造函数查询与像您这样的投影查询一起使用,以直接映射到结果对象:

List<MyClass> dtos = session.createQuery("SELECT NEW com.example.MyClass( e.name, e.data) FROM Entity e").list(); 

MyClass 可以是 POJO。它需要有一个带有适当参数的公共(public)构造函数。这意味着您可能无法使用 SELECT a.*,但必须使用显式列名称,例如 a.name

编辑:拥有 20 个参数的构造函数绝对是丑陋的,使用 Transformer 是一个可行的选择,特别是对于使用 native SQL,因为它不支持 NEW > 运算符。

关于java - 将 Hibernate 查询结果映射到对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21261200/

相关文章:

mysql - 表名或列名长度影响性能?

java - Hibernate 公式与一对多关系

java - 动态调用方法

sql - 在将 SQL 查询转换为 LINQ 方面需要帮助

mysql - 如何有效地计算 MySQL 中的序列中断/漏洞?

c# - 如果我在我的应用程序中使用它,是否必须安装 SQL Server?

java - 获取两个以空格分隔的数据并在java中计算

Java泛型

java - 泛型 - 如何返回 T 的 Map?

hibernate - 在JPA 2中使用投影