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 を実行することに関するものです。