我在下面有此类,当我调用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/

10-12 06:28