【问题标题】:How toget a list of POJOs with distinct HQL in hibernate?如何在休眠中获取具有不同 HQL 的 POJO 列表?
【发布时间】:2012-07-07 08:34:37
【问题描述】:

我正在尝试在 hibernate 中使用“distinct”HQL 子句执行查询并获取一个列表。但是,每当我使用“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,并释放了 type-safetey。

有没有办法做到这一点并获得一个列表来重新定义 getter/setteres 和 type-safey?

【问题讨论】:

标签: java hibernate hql distinct type-safety


【解决方案1】:

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

【讨论】:

  • 只要将“p from Pojo p”添加到我的选择中,返回的对象就不再是 POJO
  • p 是您的 pojo 实例而不是字段(在您的问题示例中,您检索对象是因为您从 pojo 中选择了字段)
  • 你的意思是:List myPojoList = s .createQuery( Select new myPojos from MyPojos...
  • 不,如果您select e from Employee e 没有从Employee 类中选择属性,您将收到Employee 实例返回。在你的问题中,你做了一个不同的 over 属性,有一点不同(在这种情况下导致Objects 的数组)
  • Francisco 的意思是,不是“独特”导致您的结果转换为 List。 SELECT 子句中的属性命名强制将结果转换为 PROJECTION。看到这个问题stackoverflow.com/questions/10961048/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-22
  • 1970-01-01
  • 1970-01-01
  • 2011-11-02
  • 2011-08-14
  • 2012-06-14
  • 1970-01-01
相关资源
最近更新 更多