2012-07-06 36 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

相关问题