如何在不首先查询的情况下将JPA引用的实体添加到集合中并保存



我使用的是Spring Data JPA,它允许使用getById调用创建延迟加载的实体。除非正在访问数据库,否则不会从数据库中查询这些实体。

现在,我想将其中一个惰性实体添加到已加载实体的多对多关系中。我假设在保存该实体时,应该会为交叉引用表生成一条SQL插入语句,因为所需的只是两个实体的ID,而惰性实体应该提供该ID。但我看到的是另一个查询,其中首先查询完整实体。

实体关系如下:

@ManyToMany(fetch = FetchType.EAGER, targetEntity = SecondEntity::class)
@JoinTable(
name = "some_join_table",
joinColumns = [JoinColumn(name = "first_table_id", referencedColumnName = "id")],
inverseJoinColumns = [JoinColumn(name = "second_table_id", referencedColumnName = "id")]
)
var relatedEntities = mutableListOf<SecondEntity>()

如何避免对插入的实体引用进行加载查询
JPA保存"新的";实体参考仅使用它的现有实体';s id?此处不适用。

Spring Data JPA 2.6.8,Hibernate 5.6.x

这只是Hibernate ORM尚未实现的优化。请在问题跟踪器中创建问题(https://hibernate.atlassian.net)带有测试用例(https://github.com/hibernate/hibernate-test-case-templates/blob/master/orm/hibernate-orm-5/src/test/java/org/hibernate/bugs/JPAUnitTestCase.java)它再现了这个问题。

最新更新