如何在hibernate中获取具有不同HQL的POJO列表?

时间:2012-07-06 21:15:32

标签: java hibernate hql distinct type-safety

我正在尝试使用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?

1 个答案:

答案 0 :(得分:1)

您可以使用以下方法:select p from Pojo p where p.id in (select distinct id from Pojo)。您正在子查询中执行distinct,让主查询只选择已经唯一选择的ID。