gpt4 book ai didi

java - Kotlin - 调用 getter 时未加载 HibernateProxy

转载 作者:行者123 更新时间:2023-12-01 17:19:19 26 4
gpt4 key购买 nike

我目前正在将现有的 Java 项目转换为 Kotlin,并且遇到了一些有关 Hibernate 延迟加载行为的问题。

在以下数据模型中(简化):

@Entity
open class Parent
{
@Id
@GeneratedValue
var id: Long = 0

@OneToOne(fetch = FetchType.LAZY, mappedBy = "parent", cascade = [CascadeType.ALL], optional = false)
open var child = Child(this)
}

@Entity
open class Child(@MapsId
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "parent_id", insertable = false, updatable = false)
val parent: Parent)
{
@Id
private val parentId: Long = 0

// Its actual type is not relevant, as long as it is not a primitive type
var whateverAttributeFromChild: AnyComplexType
}

延迟加载似乎按预期工作(当我查询 Parent 时,child 属性由 HibernateProxy 的子类表示,并且在数据库中,不查询 Child 表)。

但是,当我在应用程序中运行 parent.child 时,Hibernate 不会加载子级。这意味着:如果我调用parent.child.whateverAttributeFromChild,则whateverAttributeFromChild将为NULL(因为它未加载)。

我找不到一种方法来告诉 Hibernate 在访问时加载惰性属性(并且我不想手动取消代理应用程序中的每个惰性属性)。

有人能解决这个问题吗?

非常感谢!

最佳答案

找到解决方案:

除了 @Entity 类本身的 open 关键字之外,所有属性也应该是 open !将 open 关键字添加到 Child.whateverAttributeFromChild 属性时,延迟加载按预期工作!

所以不要忘记打开你的属性!!

关于java - Kotlin - 调用 getter 时未加载 HibernateProxy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61326553/

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