Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
刷新()后JPA/Hibernate惰性加载列表为空_Hibernate_Jpa - Fatal编程技术网

刷新()后JPA/Hibernate惰性加载列表为空

刷新()后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

我遇到了一个非常奇怪的JPA/Hibernate(v5.4.28)问题,希望有人能给我一个如何处理这个问题的提示。这个场景解释起来有点复杂,但我会尽量简化它


我有四个实体,都是
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
我正在使用entitymanger从数据库中获取一个
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
时,问题似乎得到了解决