我有两门课:
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/