【发布时间】:2021-02-27 14:06:21
【问题描述】:
假设我们有以下实体:
@Entity
@Table(name="parent")
class Parent {
@OneToMany(fetchType=FetchType.Lazy,cascade=[CascadeType.ALL])
val childs: List<Child>
}
@Entity
@Table(name="child")
class Child {
@ManyToOne(fetchType=FetchType.LAZY)
val parent: Parent
}
我现在想避免,hibernate 在我第一次调用时会获取数据库
parent.childs.addAll(childs)
因为我知道这个集合是空的。有没有办法告诉 JPA/Hibernate 它不需要进行 db fetch?
【问题讨论】:
-
你怎么知道这个集合是空的?是新创建的实体吗?
-
是的,但是由于某些情况我无法在创建父级时添加子级,所以我必须先添加父级,然后再添加子级。
-
这是一个假设,稍后在创建
Parent时第二个机制插入条目时可能会失效,SQL 查询是否如此昂贵? -
这似乎很昂贵,他需要延迟初始化 200 个子集合(这对我的操作来说是正常的)长达 10 秒,这是不可接受的。所以我正在寻找优化方法,跳过这个初始化似乎是这里最好的方法......
-
当然你也可以直接创建
Child而不将它们添加到childs集合中,如果有帮助的话,之后保存Parent?
标签: spring hibernate kotlin spring-data-jpa