gpt4 book ai didi

java - Hibernate LAZY fetch 未初始化实例

转载 作者:搜寻专家 更新时间:2023-11-01 03:41:59 24 4
gpt4 key购买 nike

我两天前遇到了惰性关联的问题,至今仍未找到对这种行为的解释。这是我简化的类层次结构:

@Entity
@Table(name="A")
public class A
{
@Id
@GeneratedValue
@Column(name="ID")
private int id;
@OneToMany(mappedBy="a", fetch=FetchType.LAZY, cascade=CascadeType.ALL)
private Set<B> listB = new HashSet<B>();
}

@Entity
@Table(name="B")
public class B
{
@Id
@GeneratedValue
@Column(name="ID")
private int id;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="A_ID")
private A a;
@ManyToOne(fetch=FetchType.LAZY) // ERROR!
// @ManyToOne(fetch=FetchType.EAGER) // OK
@JoinColumn(name="C_ID")
private C c;
}

@Entity
@Table(name="C")
public class C {
@Id
@GeneratedValue
@Column(name="ID")
private int id;
}

当我尝试从数据库读取简单结构时:A->B->C 我得到以下结果:

System.out.println(a.getId());                  // 1
for (B b : a.getListB()) {
System.out.println(b.getId()); // 1
C c = b.getC();
System.out.println(c.getId()); // 0 !!!
}

如您所见,C 的实例未正确初始化。将类 B 中字段 c 的提取类型从 LAZY 更改为 EAGER 后,一切正常!

我怀疑有一些 CGLIB 魔法,但在规范和 Google 中都找不到线索。有人可以解释一下吗?

感谢您的帮助!!!

最佳答案

如果您想了解延迟加载,请参阅此 answer ;它很好地定义了它。

关于java - Hibernate LAZY fetch 未初始化实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12195124/

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