簡體   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