0

3 つのエンティティがあるとします。

Car Place Visit

Aは、が を訪れたVisitときのオカレンスを表すため、到着時刻、出発時刻、およびへの 1 つと への 2 つの外部キーがあります。CarPlaceCarPlace

JPA では、Visitとの@ManyToOne関係Carおよび との@ManyToOne関係がありPlaceます。(したがって、aCarは多くの訪問を行うPlaceことができ、a は多くの訪問を行うことができます)、上記の外部キーを使用します。

すべての s (または s の数は関係ありません)Carを訪問した(一意の) s のリストを知りたいとしましょう。PlacePlaceMap<Place, List<Car>>

通常のネイティブ SQL ではjoinandgroup byを使用するだけですが、これをエレガントに実現できる JPA のトリックはありますか?

JPA 2.0 (Hibernate 4.1) を使用しています。

4

1 に答える 1

0

グアバの助けを借りて(しかし、あなたは簡単になしで行うことができます):

String jpql = "select distinct place, car from Visit visit"
              + " inner join fetch visit.car car"
              + " inner join fetch visit.place place"

List<Object[]> placeAndCars = em.createQuery(jpql).getResultList();
ListMultimap<Place, Car> result = ArrayListMultimap.create();
for (Object[] row : placesAndCars) {
    result.put((Place) row[0], (Car) row[1]);
}
return result;
于 2012-12-10T15:23:58.537 に答える