我在下面有此类,当我调用addDataException时,它会进入数据库并在每次添加时都捕获所有异常。有人可以解释一下,并设法阻止它吗?
@Entity
public class Tenant extends BaseEntity {
@OneToMany(mappedBy = "tenant", fetch = FetchType.LAZY, orphanRemoval = true)
@Cascade({CascadeType.ALL})
private Set<DataException> dataExceptions = new HashSet<>();
public void addDataException(DataException dataException) {
dataExceptions.add(dataException);
dataException.setTenant(this);
}
日志
.
.
.
20:21:47.091 [scheduler-1] DEBUG org.hibernate.loader.Loader - Result set row: 944
20:21:47.091 [scheduler-1] DEBUG org.hibernate.loader.Loader - Result row: EntityKey[com.test.DataException#74645]
20:21:47.093 [scheduler-1] DEBUG org.hibernate.loader.Loader - Found row of collection: [com.test.dataExceptions#70]
20:21:47.094 [scheduler-1] DEBUG org.hibernate.loader.Loader - Result set row: 945
.
.
.
最佳答案
您正在使用Set
,从Set
documentation中我们得到:
不包含重复元素的集合。更正式地说,集合不包含元素对e1和e2,使得e1.equals(e2)最多包含一个空元素。顾名思义,此接口对数学集合抽象进行建模。
为了检查是否可以将新的DataException
添加到集合中,需要先从数据库中加载它。由于这个原因,如果您在add
中执行Set
操作,它将触发数据加载。
对于你的情况
如果您只想存储新的DataException
,也许您可以简单地存储DataException
对象,如果已经存储了该对象,则会收到PK违例,但您将避免选择加载此类集合。
关于java - Hibernate Lazy/Eager列表始终会通过添加新内容来获取整个列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25232117/