2012-07-06 24 views
0

我試圖在Hibernate中使用'distinct'HQL子句執行一個查詢並獲得一個List。但是,無論何時使用'ditinct',我都會得到一個java對象列表,而不是使用'distinct'返回的POJO。有沒有一種很好的方式來獲得pojos而不是物體?如何在Hibernate中使用不同的HQL來獲取POJO列表?

例子返回預期的POJO的列表:

class myPojos() { ... (has some properties/fields) propOne, propTwo, propThree ...} 

裏面一個DAO

Session s = HibernateUtil.currentSession(); 

List<myPojos> myPojoList = s 
       .createQuery("select from " getPojoClass().getName()) 
       .list(); 

然而,加入了 '明顯的' 條款

List<myPojos> myPojoList = s 
       .createQuery("select distcinct mpl.propOne, mpl.propTwo, mpl.propThree from " + getPojoClass().getName() + "mpl") 
       .list(); 

...相反返回一個對象列表。所以,我放棄了myPojos類的所有getter和setter以及鬆散的類型安全。

有沒有辦法做到這一點,並得到一個列表retatin getters/setteres & type-saftey?

+0

是HQL必須的嗎?檢查這裏(類似的NHibernate問題):http://stackoverflow.com/questions/318157/get-distinct-result-set-from-nhibernate-using-criteria-api – 2012-07-06 21:27:39

回答

1

您可以使用以下方法:select p from Pojo p where p.id in (select distinct id from Pojo)。您正在子查詢中執行distinct,讓主查詢只選擇已選擇的唯一ID。

+0

只要我添加「p從Pojo p」到我選擇返回的對象不再是POJO – JJRutter 2012-07-06 21:38:39

+0

p是你的pojo實例,而不是一個字段(在你的問題示例中,你的檢索對象,因爲你從你的pojo選擇字段) – 2012-07-06 21:40:26

+0

你的意思是:列表 myPojoList = s .createQuery(Select新的myPojos from MyPojos ... – JJRutter 2012-07-06 21:51:34

相關問題