将Hibernate查询的结果映射到对象

时间:2014-01-21 14:41:26

标签: 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用户,其中用户是另一个类。我尝试了addEntity方法,addScalar以及其他我不记得的东西,也尝试在Internet上找到解决方案,但没有成功。我完全不知道如何使它工作。任何帮助将不胜感激。

1 个答案:

答案 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

编辑:拥有20个参数的构造函数肯定很难看,使用Transformer是一个可行的选项,特别是对于使用本机SQL,因为它不支持NEW运算符。