【问题标题】:How do I specify DISTINCT when using JPA 2?使用 JPA 2 时如何指定 DISTINCT?
【发布时间】:2013-08-21 16:17:04
【问题描述】:

我正在使用 Hibernate 4.1.0.Final、MySQL 5.5 和 JPA 2.0。从我的 JPA 查询返回值时,如何在不将函数重写为 SQL(或 JPQL)语句的情况下指定“distinct”子句?下面如果我到目前为止如何编写我的 JPA 方法......

final List<ReturnedObject> foundReturnedObjects = new ArrayList<ReturnedObject>();

final CriteriaBuilder builder = m_entityManager.getCriteriaBuilder();
final CriteriaQuery<ReturnedObject> query = builder.createQuery(ReturnedObject.class);

final Root<JoinedObject> JoinedObject = query.from(JoinedObject.class);
final Join<JoinedObject, ReturnedObject> ReturnedObject = JoinedObject.join(JoinedObject_.returnedObject);
if (params != null && !params.isEmpty()) 
{
    query.where(JoinedObject.get(JoinedObject_.organization).in(params));
    query.select(ReturnedObject);
    foundReturnedObjects.addAll(m_entityManager.createQuery(query).getResultList());
} // if
return foundReturnedObjects;

但是,问题是可能会返回重复的项目。请注意,我意识到我可以将所有结果传输到 java.util.Set,但这个问题专门关于使用 DISTINCT 子句执行 SQL,而不是在查询返回后执行该工作。

【问题讨论】:

    标签: hibernate jpa jpa-2.0 distinct resultset


    【解决方案1】:

    这可以通过使用distinct 方法来完成,该方法可以从 CriteriaQuery 本身找到:

    query.distinct(true);
    

    【讨论】:

      猜你喜欢
      • 2010-11-23
      • 1970-01-01
      • 2019-06-27
      • 2016-10-31
      • 2011-12-03
      • 2012-09-07
      • 2011-08-27
      • 2014-04-21
      • 1970-01-01
      相关资源
      最近更新 更多