刷新()后JPA/Hibernate惰性加载列表为空
我遇到了一个非常奇怪的JPA/Hibernate(v5.4.28)问题,希望有人能给我一个如何处理这个问题的提示。这个场景解释起来有点复杂,但我会尽量简化它刷新()后JPA/Hibernate惰性加载列表为空,hibernate,jpa,Hibernate,Jpa,我遇到了一个非常奇怪的JPA/Hibernate(v5.4.28)问题,希望有人能给我一个如何处理这个问题的提示。这个场景解释起来有点复杂,但我会尽量简化它 我有四个实体,都是FetchType.LAZY: AddressEntity StudentEntity->有一个列表,其中fetch=FetchType.LAZY,cascade=CascadeType.ALL CourseEntity->有一个列表,其中fetch=FetchType.LAZY,cascade=CascadeType
我有四个实体,都是
FetchType.LAZY
:
AddressEntity
->有一个StudentEntity
,其中列表
fetch=FetchType.LAZY,cascade=CascadeType.ALL
->有一个CourseEntity
,其中列表
fetch=FetchType.LAZY,cascade=CascadeType.ALL
->引用了attentity
,StudentEntity
(必须是学生的一个)和AddressEntity
-所有这些都带有CourseEntity
fetch=FetchType.LAZY,cascade=CascadeType.PERSIST
CourseEntity
,并使用getter访问各种嵌套实体。
由于它们都是通过@ManyToOne
或@OneToMany
链接的,我可以通过获取课程的天线列表、获取学生,然后调用地址列表上的get来获取每个学生的地址
但是,如果我在获取CourseEntity
后调用entitymanger的flush()方法,但在触发课程的AttentingEntity
列表的延迟加载之前,JPA仍然会加载出席列表并触发每个学生的延迟加载,但不会为学生的AddressEntity
列表触发延迟加载,学生的地址列表大小始终为零
有人知道为什么刷新似乎“打破”了这里的延迟加载吗 这是预期的行为吗 我的注释是否错误,或者是否需要设置其他注释/属性
Thx提前了很多时间 这听起来像是个bug。请在issue tracker()中创建一个问题,并使用一个复制该问题的测试用例()。我终于找到了导致此行为的原因(尽管我仍然不确定这是预期行为还是错误)。 显然,问题是我初始化了实体中的所有实例变量列表,例如
public StudentEntity
{
// ...
@OneToMany(...)
private List<AddressEntity> = new ArrayList<>;
}
公共学生实体
{
// ...
@一个女人(…)
私有列表=新的ArrayList;
}
不知何故,这似乎“混淆”了某些惰性负载期间的休眠。当我删除newarraylist
时,问题似乎得到了解决