gpt4 book ai didi

java - Hibernate Lazy/Eager 列表总是通过新添加来获取整个列表

转载 作者:行者123 更新时间:2023-12-01 12:39:41 25 4
gpt4 key购买 nike

我在下面有这个类,当我调用 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并且来自Setdocumentation我们得到:

A collection that contains no duplicate elements. More formally, sets contain no pair of elements e1 and e2 such that e1.equals(e2), and at most one null element. As implied by its name, this interface models the mathematical set abstraction.

为了检查新的DataException是否可以添加到集合中,需要首先从数据库加载它。由于这个原因,如果您在 Set 中执行 add 操作,它将触发数据加载。

针对您的情况

如果您只是对存储新的 DataException 感兴趣,也许您可​​以简单地存储 DataException 对象,如果它已经存储,您将收到 PK 违规,但是您将避免选择加载此类集合。

关于java - Hibernate Lazy/Eager 列表总是通过新添加来获取整个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25232117/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com