我正在使用JPA来保留我的实体。假设我在实体A和B之间有ManyToMany
的关系。因此,在课程A
中,它将是List<B>
,而B
是List<A>
。
我的问题是关于增加新关系的效率。
我可以通过简单的方式在课程add(new B())
的列表中创建A
。当我在运行时调用add方法时,类List
中的B
个A
对象是否都将从数据库加载?这有效吗?
如果我有200个关系,它会加载所有关系,只需添加一个新对象B
?最好创建一个本机查询以在ManyToMany
表中插入新行。
答案 0 :(得分:2)
List上add()的行为取决于JPA提供程序。
对于EclipseLink,对于LAZY List关系,add()不会导致默认情况下提取列表。
答案 1 :(得分:1)
通常,JPA提供程序提供自己的Java Collections实现,支持延迟加载,因此并非所有关系都会从一开始就加载。
此外,当您按照描述修改任何列表时,JPA提供程序应透明地更新数据库。除了您自己可以缓存的引用之外,您不必担心保持一致。
答案 2 :(得分:0)
当它开始运行到数百个时,最好只将连接表映射为JPA实体,而不是使用ManyToMany映射,而只是直接在连接表上使用两个ManyToOne映射执行操作(突变和选择)在那里。