1

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

4

1 に答える 1