我有一个如下的类,需要使用Hibernate从数据库中检索。问题是我的班级有多个成员,其中大多数是班级,如何检索他们?
@Entity public class Student { @Id long id; String name; String fname; @OneToMany List<Course> courses; @ManyToOne Dealer dealer; ... } @Entity public class Dealer { @Id long id; String name; @OneToMany(fetch = FetchType.LAZY, mappedBy = "cr.dealer", cascade = CascadeType.ALL) Set<Car> cars = new HashSet<Cars>(0); .. }
我需要检索学生ID 1及其所有课程,经销商和经销商的汽车清单。
我的预测如下,但不返回任何内容。
... .setProjection(Projections.projectionList() .add(Projections.property("friends.cars").as("cars") ...
因为您具有课程列表和一组汽车,所以您只需在一个查询中获取整个图形即可:
select s from Student s left join fetch s.courses left join fetch s.dealer d left join fetch d.cars where s.id = :id
因为您要获取两个集合,所以此查询将生成笛卡尔乘积,因此您需要确保所选的子集合没有太多条目。
如果您不想运行笛卡尔积,则只需运行以下查询:
select s from Student s left join fetch s.courses left join fetch s.dealer d where s.id = :id
然后您访问Dealer.cars并通过单独的查询获取该集合:
Student s = ...; s.getDealer().getCars().size();