使用JPA 2时如何指定DISTINCT?

时间:2013-08-19 18:56:45

标签: hibernate jpa jpa-2.0 distinct resultset

我正在使用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而不是在返回查询后执行该工作。

1 个答案:

答案 0 :(得分:1)

可以使用distinct方法完成,可以从CriteriaQuery本身找到:

query.distinct(true);
相关问题