gpt4 book ai didi

java - 没有集合的 Hibernate 中的多对多映射

转载 作者:搜寻专家 更新时间:2023-10-30 23:21:58 24 4
gpt4 key购买 nike

举一个Student和Subject的经典例子

多对多关系

有什么方法可以使用不使用集合的 POJO 来映射它们吗?

例如

学生.java

@Entity
class Student{
@id
int id;
String name;
}

主题.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 生成这些表?

提前致谢!

更新:(我只是给出一个背景,为什么我问这个?)我避免使用集合的原因是我希望我的服务层返回未绑定(bind)到持久层的数据。返回具有主题列表的学生对象将使我的服务层客户端假定他们可以从返回的学生对象中获取主题(然后他们将获得 LazyLoadException)。如果我让它 EAGER 加载,那就太过分了,因为在许多情况下,客户只会喜欢关于学生的信息,而不是他的所有科目。

最佳答案

要获取所有主题,您需要像这样加入表格:

select *
from subject
join student_subject
on subject.id = student_subject.subject_id
where
student_subject.student_id = ?

Is it possible to generate these tables with the given beans?

如果您使用 Hibernate 中的多对多映射,如果您在 POJO 中添加集合,它将为您创建查询。没有收集,您必须手动进行。

请注意,集合不会占用内存,除非:

  1. 你是第一次使用它们
  2. 或者您在 POJO 中将它们标记为“急切加载”。

默认是延迟加载,所以即使表很大,你也不会注意到。

关于java - 没有集合的 Hibernate 中的多对多映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5483635/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com