假设我有3个实体:
Car
Place
Visit
Visit
表示Car
访问Place
时出现的情况,因此它会有到达时间,剩余时间和2个外键,一个到{ {1}}和Car
一个。
在JPA中,Place
与Visit
的关系@ManyToOne
与Car
的关系@ManyToOne
。 (因此,使用上述外键,Place
可以进行多次访问,而Car
可以进行多次访问。
让我们说我想知道访问所有Place
s(或多个Car
s的(唯一)Place
列表,无关紧要,是什么获取Place
的最佳方法是只在一个SQL查询中完成?
在普通的原生SQL中,我们只使用Map<Place, List<Car>>
和join
,是否有一些JPA技巧可以优雅地实现这一目标?
我正在使用JPA 2.0(Hibernate 4.1)。
答案 0 :(得分: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;