Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于插入关系的JPA映射_Java_Sql_Jpa - Fatal编程技术网

Java 用于插入关系的JPA映射

Java 用于插入关系的JPA映射,java,sql,jpa,Java,Sql,Jpa,我正在使用JPA来持久化我的实体。假设我在实体a和B之间有一个manytomy关系。因此,在类a中,它将是一个列表,在Ba列表 我的问题是关于增加新关系的效率。 我可以用一种简单的方法在classa的列表中添加(new B())。当我在运行时调用add方法时,类A中B对象的列表是否都将从数据库中加载?这有效吗 如果我有200个关系,它将加载所有关系,只需添加一个新对象B?最好创建一个本地查询,在manytomy表中插入一个新行。当它开始运行到数百行时,最好只将联接表映射为JPA实体,而不使用ma

我正在使用JPA来持久化我的实体。假设我在实体a和B之间有一个
manytomy
关系。因此,在类
a
中,它将是一个
列表
,在
B
a
列表

我的问题是关于增加新关系的效率。 我可以用一种简单的方法在class
a
的列表中添加(new B())。当我在运行时调用add方法时,类
A
B
对象的
列表是否都将从数据库中加载?这有效吗


如果我有200个关系,它将加载所有关系,只需添加一个新对象
B
?最好创建一个本地查询,在
manytomy
表中插入一个新行。

当它开始运行到数百行时,最好只将联接表映射为JPA实体,而不使用manytomy映射,只执行操作(突变和选择)直接在包含两个manytone映射的联接表上。

通常,JPA提供程序提供自己的Java集合实现,这些集合支持延迟加载,因此并非所有关系都会从一开始就被加载

此外,当您按照描述修改任何列表时,JPA提供者应该透明地更新数据库。除了您自己可能缓存的引用之外,您不必担心保持内容的一致性。

列表上add()的行为取决于JPA提供程序


对于EclipseLink,对于惰性列表关系add(),默认情况下不会获取列表。

在效率方面,什么是最好的?使用add()或创建要插入的本机查询?在使用JPA提供程序时,您几乎总是希望避免使用本机查询。除非你真的知道自己在做什么。好的JPA提供者可以很好地利用DBMS的特性,如缓存、池和索引。