2013-08-19 4 views
1

Я использую Hibernate 4.1.0.Final, MySQL 5.5 и JPA 2.0. При возврате значений из моего запроса JPA, как мне указать «отличное» предложение без переопределения моей функции как оператора SQL (или JPQL)? Ниже, если, как я закодированы мой метод JPA до сих пор ...Как указать DISTINCT при использовании JPA 2?

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, но этот вопрос специально посвящен исполнению SQL с предложением DISTINCT вместо выполнения этой работы после возвращения запроса.

ответ

1

Это может быть сделано с помощью distinct метод, который можно найти в самой CriteriaQuery:

query.distinct(true); 
Смежные вопросы