繁体   English   中英

在Hibernate中使用本机SQL查询将结果集添加到DTO中

[英]getting result set into DTO with native SQL Query in Hibernate

我有一个如下查询

select f.id, s.name, ss.name
from first f
left join second s on f.id = s.id
left join second ss on f.sId = ss.id

如果我可以使用HQL,我会使用HQL构造函数语法直接用结果集填充DTO。 但是,由于hibernate不允许左连接而没有关联,我必须使用Native SQL Query。

目前,我循环遍历JDBC样式的结果集并填充DTO对象。 有没有更简单的方法来实现它?

你可以使用结果转换器。 引用Hibernate 3.2:HQL和SQL的变换器

SQL变形金刚

使用本机sql返回非实体bean或Map通常更有用,而不是基本的Object[] 现在可以使用结果变换器。

 List resultWithAliasedBean = s.createSQLQuery( "SELECT st.name as studentName, co.description as courseDescription " + "FROM Enrolment e " + "INNER JOIN Student st on e.studentId=st.studentId " + "INNER JOIN Course co on e.courseCode=co.courseCode") .addScalar("studentName") .addScalar("courseDescription") .setResultTransformer( Transformers.aliasToBean(StudentDTO.class)) .list(); StudentDTO dto =(StudentDTO) resultWithAliasedBean.get(0); 

提示:HSQLDB上需要addScalar()调用以使其与属性名称匹配,因为它以全部大写形式返回列名(例如“STUDENTNAME”)。 这也可以通过自定义转换器来解决,该转换器搜索属性名称而不是使用完全匹配 - 也许我们应该提供fuzzyAliasToBean()方法;)

参考

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM