2012-12-10 78 views
0

可以說我有3個實體:最優雅,最有效的方式來獲得地圖結果從JPA加入

Car Place Visit

一個Visit代表發生時Car參觀了Place,所以它會有它到達的時間,它剩下的時間和2個外鍵,一個到Car,另一個到Place

在JPA中,Visit@ManyToOneCar@ManyToOne的關係與Place的關係。 (因此,使用上面的外鍵,Car可以進行多次訪問,並且Place可以進行多次訪問)。

可以說,我想知道,遍訪Place S(唯一的)Car S的清單(或數量的Place S,無所謂),什麼是得到Map<Place, List<Car>>,以便它是最好的方法只在一個SQL查詢中完成?

在正常的原生SQL中,我們只會使用joingroup by,是否有一些JPA技巧可以實現這個優雅?

我正在使用JPA 2.0(Hibernate 4.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; 
相關問題