有没有办法在HQL中创建一个Distinct查询.通过使用"distinct"关键字或其他方法.我不确定distinct是否是HQL的有效关键字,但我正在寻找与SQL关键字"distinct"相当的HQL.
这是我们使用的一小段hql.(名称已更改为保护身份)
String queryString = "select distinct f from Foo f inner join foo.bars as b" + " where f.creationDate >= ? and f.creationDate < ? and b.bar = ?"; return getHibernateTemplate().find(queryString, new Object[] {startDate, endDate, bar});
值得注意的是,distinct
HQL中的关键字不直接映射到distinct
SQL中的关键字.
如果distinct
在HQL中使用关键字,那么有时Hibernate将使用distinct
SQL关键字,但在某些情况下,它将使用结果转换器来生成不同的结果.例如,当您使用这样的外部联接时:
select distinct o from Order o left join fetch o.lineItems
在这种情况下,无法在SQL级别过滤掉重复项,因此在执行SQL查询后,Hibernate使用a ResultTransformer
来过滤重复项.
下次做这样的事
Criteria crit = (Criteria) session. createCriteria(SomeClass.class). setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); List claz = crit.list();
您也可以使用Criteria.DISTINCT_ROOT_ENTITY
Hibernate HQL查询.
例:
Query query = getSession().createQuery("from java_pojo_name"); query.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); return query.list();