我正在尝试使用hibernate中的'distinct'HQL子句执行查询并获取List。但是,每当我使用'ditinct'时,我会获得一个java对象列表,而不是使用'distinct'返回的POJO。是否有一种很好的方法来获取pojos而不是对象?
按预期返回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();
但是,添加'distinct'子句
List<myPojos> myPojoList = s
.createQuery( "select distcinct mpl.propOne, mpl.propTwo, mpl.propThree from " + getPojoClass().getName() + "mpl" )
.list();
...而是返回一个对象列表。所以,我放弃了myPojos类的所有getter和setter,并且松散了类型安全。
有没有办法做到这一点并得到一个List来重新获得getters / setteres&amp;型saftey?
答案 0 :(得分:1)
您可以使用以下方法:select p from Pojo p where p.id in (select distinct id from Pojo)
。您正在子查询中执行distinct,让主查询只选择已经唯一选择的ID。