Hibernate SQL查询结果映射/转换到对象/类/ Bean [英] Hibernate SQL Query result Mapping/Convert TO Object/Class/Bean

查看:431
本文介绍了Hibernate SQL查询结果映射/转换到对象/类/ Bean的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

1 2:select(table。*)/(all column)is OK

  String sql =select t_student。 *来自t_student; 
// String sql =select t_student.id,t_student.name,... from t_student; //选择所有列
SQLQuery query = session.createSQLQuery(sql);
query.addEntity(Student.class); //或query.addEntity(alias,Student.class);
//query.list(); [Student @ ...,Student @ ...,Student @ ...]
query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); //或其他变换
query.list(); // [{Student(or alias)= Student @ ...},{Student = Student @ ...}]

3:选择一些列(不是全部),是错误

  String sql =select t_student。 id,t_student的t_student.name.t_student.sex; 
SQLQuery query = session.createSQLQuery(sql);
query.addEntity(Student.class);
query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
query.list(); //例外:无效列/无列

我希望3能正常工作,结果可以映射到Student.class。

Like:Student [id = ?, name = ?, sex = ?,(其他字段为null / default)]

I'您可以进一步添加
.setResultTransformer(Transformers.aliasToBean(YOUR_DTO.class));
并自动将其映射到您的自定义dto对象,另请参阅返回非托管实体 $ b

例如:

  public List< MessageExtDto> getMessagesForProfile2(Long userProfileId){
查询query = getSession()。createSQLQuery(
+从messageVO中选择a。*,b。*
+作为
+INNER JOIN(SELECT max(id)AS id,count(*)AS count FROM messageVO GROUP BY messageConversation_id)as b ON a.id = b.id
+where a.id> 0
+)
.addScalar(id,new LongType())
.addScalar(message,new StringType())
..... ....你的映射
.setResultTransformer(Transformers.aliasToBean(MessageExtDto.class));

列出< MessageExtDto> list = query.list();
返回列表;
}


1 2: select (table.*)/(all column) is OK

String sql = "select t_student.* from t_student";
//String sql = "select t_student.id,t_student.name,... from t_student"; //select all column
SQLQuery query = session.createSQLQuery(sql);
query.addEntity(Student.class);//or query.addEntity("alias", Student.class);
//query.list();[Student@..., Student@..., Student@...]
query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); //or other transformer
query.list(); //[{Student(or alias)=Student@...},{Student=Student@...}]

3: select some column(not all of), is Error

String sql = "select t_student.id,t_student.name.t_student.sex from t_student";
SQLQuery query = session.createSQLQuery(sql);
query.addEntity(Student.class);
query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
query.list(); //Exception:invalid column/no column

I want "3" to work ok, and let the result can be mapped to Student.class.
Like: Student[id=?, name=?, sex=?, (other field are null/default)]
I've no idea for this error, help me please!

解决方案

You can go further and add .setResultTransformer(Transformers.aliasToBean(YOUR_DTO.class)); and automatically map it to your custom dto object, see also Returning non-managed entities.

For example:

public List<MessageExtDto> getMessagesForProfile2(Long userProfileId) {
    Query query = getSession().createSQLQuery("  "
            + " select a.*, b.* "
            + " from messageVO AS a "
            + " INNER JOIN ( SELECT max(id) AS id, count(*) AS count FROM messageVO GROUP BY messageConversation_id) as b ON a.id = b.id "
            + " where a.id > 0 "
            + " ")
            .addScalar("id", new LongType())
            .addScalar("message", new StringType())
            ......... your mappings
            .setResultTransformer(Transformers.aliasToBean(MessageExtDto.class));

    List<MessageExtDto> list = query.list();
    return list;
}

这篇关于Hibernate SQL查询结果映射/转换到对象/类/ Bean的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆