我有两个班级:
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用户,其中用户是另一个类。我尝试了addEntity方法,addScalar以及其他我不记得的东西,也尝试在Internet上找到解决方案,但没有成功。我完全不知道如何使它工作。任何帮助将不胜感激。
答案 0 :(得分:1)
您可以将构造函数查询与您的投影查询一起使用,以直接映射到结果对象:
List<MyClass> dtos = session.createQuery("SELECT NEW com.example.MyClass( e.name, e.data) FROM Entity e").list();
MyClass
可以是POJO。它需要具有适当参数的公共构造函数。这意味着您可能无法使用SELECT a.*
,但必须使用显式列名,例如a.name
Transformer
是一个可行的选项,特别是对于使用本机SQL,因为它不支持NEW
运算符。