一尘不染

在Hibernate中使用本地SQL查询将结果集放入DTO

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状态不允许在没有关联的情况下进行左联接,因此我必须使用本机SQL查询。

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


阅读 326

收藏
2020-06-20

共1个答案

一尘不染

您也许可以使用结果转换器。引用Hibernate3.2:HQL和SQL的变压器

SQL变形金刚

使用本机sql返回非实体bean或Map通常比basic更为有用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);

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

参考文献

2020-06-20