为什么Hibernate在更新实体之前检索列表

时间:2020-04-22 14:40:41

标签: hibernate spring-boot spring-data-jpa relationship hibernate-mapping

以下是映射

在A.class内部

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, 
orphanRemoval = true, mappedBy = "aObj")
private List<B> listB;

在B.class内部

@ManyToOne(fetch = FetchType.LAZY)
@JsonIgnore
@JoinColumn(name = "a_id")
private A aObj;

我有2个实体A和B。实体A包含List作为@OneToMany关系,而B包含对A的引用(双向一对多关系)。插入操作效果很好,但是当我尝试更新记录时。

A a = repository.findById(1);
a.setName("Test Name");
repository.save(a);

这里的问题是,休眠会执行一个额外的全选查询以检索List。

顺序如下

Hibernate: select query for A
Hibernate: select all query for B
Hibernate: update query for A

现在为什么要在这里选择所有与B有关的查询 我已经在两端定义了延迟获取策略。

1 个答案:

答案 0 :(得分:0)

您需要使用:

Error in function FlateEncode (https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.5.3/jspdf.debug.js:11745:7): Deflater is not defined

请注意,如果使用级联:

@OneToMany(mappedBy = "{your_var}", fetch = FetchType.LAZY)
private List<B> list;

此属性具有多米诺骨牌效果,如果列表不为空,则尝试保留或更新列表对象,在这种情况下,我认为这不是您的方法,所以请不要使用它