给出了学生和主题的经典例子
他们有多对多的关系,
有没有办法使用POJO来映射它们而不使用集合?
e.g。
Student.java
@Entity
class Student{
@id
int id;
String name;
}
Subject.java
@Entity
class Subject{
@id
int id;
String desc;
}
表
student (id,name)
subject (id,desc)
student_subject (student_id, subject_id) /* both foreign keys */
您如何查询学生的所有科目? 是否可以使用给定的bean生成这些表?
提前致谢!
更新:(我只是给出一个背景为什么我问这个?) 我避免收集的原因是我希望我的服务层返回与持久层无关的数据。返回具有Subjects列表的Student对象将使我的服务层客户端假设他们可以从返回的student对象中获取主题(然后他们将获得LazyLoadException)。如果我加载EAGER,那就太过分了,因为在很多情况下,客户只会喜欢关于学生的信息而不会得到他所有的科目。
答案 0 :(得分:1)
要获得所有科目,您需要像这样加入表格:
select *
from subject
join student_subject
on subject.id = student_subject.subject_id
where
student_subject.student_id = ?
是否可以使用给定的bean生成这些表?
如果您使用Hibernate的多对多映射,如果您在POJO中添加集合,它将为您创建查询。没有集合,您必须手动完成。
请注意,除非:
,否则集合不会占用内存默认是延迟加载,因此即使表格很大,您也不会注意到。
答案 1 :(得分:1)
您应该问的问题是,您是否可以为您的类建模,以便在没有集合的情况下在它们之间建立多对多的关系?
使用集合然后让Hibernate使用延迟加载来填充对象图是理想的。