0

假设我有 3 个实体:

Car Place Visit

AVisit表示当 aCar访问 a时发生的事件Place,因此它将具有到达时间、离开时间和 2 个外键,一个到 the Car,一个到Place.

在 JPA 中,Visit@ManyToOne关系到Car@ManyToOne关系到Place. (所以 aCar可以进行多次访问,aPlace可以进行多次访问),使用上面的外键。

假设我想知道Car访问所有Places (或多个Places,没关系)的(唯一)s 的列表,获得 aMap<Place, List<Car>>以便仅在一个 SQL 查询中完成的最佳方法是什么?

在普通的原生 SQL 中,我们只会使用joinand group by,是否有一些 JPA 技巧可以优雅地实现这一点?

我正在使用 JPA 2.0(休眠 4.1)。

4

1 回答 1

0

With the help of Guava (but you could easily do without):

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 回答