当前位置:  开发笔记 > 数据库 > 正文

如何在HQL中创建Distinct查询

如何解决《如何在HQL中创建Distinct查询》经验,为你挑选了4个好方法。

有没有办法在HQL中创建一个Distinct查询.通过使用"distinct"关键字或其他方法.我不确定distinct是否是HQL的有效关键字,但我正在寻找与SQL关键字"distinct"相当的HQL.



1> Feet..:

这是我们使用的一小段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});


当涉及文本类型时,这对mssql不起作用

2> Daniel Alexi..:

值得注意的是,distinctHQL中的关键字不直接映射到distinctSQL中的关键字.

如果distinct在HQL中使用关键字,那么有时Hibernate将使用distinctSQL关键字,但在某些情况下,它将使用结果转换器来生成不同的结果.例如,当您使用这样的外部联接时:

select distinct o from Order o left join fetch o.lineItems

在这种情况下,无法在SQL级别过滤掉重复项,因此执行SQL查询,Hibernate使用a ResultTransformer来过滤重复项.



3> 小智..:

下次做这样的事

 Criteria crit = (Criteria) session.
                  createCriteria(SomeClass.class).
                  setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

 List claz = crit.list();



4> aadi53..:

您也可以使用Criteria.DISTINCT_ROOT_ENTITYHibernate HQL查询.

例:

Query query = getSession().createQuery("from java_pojo_name");
query.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
return query.list();

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有