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
Hibernate 集合为空时OneToMany LazyInitializationException异常_Hibernate_Jpa_Jpql_Eager - Fatal编程技术网

Hibernate 集合为空时OneToMany LazyInitializationException异常

Hibernate 集合为空时OneToMany LazyInitializationException异常,hibernate,jpa,jpql,eager,Hibernate,Jpa,Jpql,Eager,我知道有几十个问题都是同一个主题,但我不明白为什么它们在我的案例中不起作用 我有两个表,一个表名为Account,另一个表名为CustomerRelations,它们之间有一对多的关系,一个帐户可以属于多个CustomerRelations。。。帐户可以不存在其他客户关系,但客户关系只能附加到现有帐户 这是在我的实体类中注释它们的方式: 科目表: @OneToMany(mappedBy = "account", cascade = CascadeType.ALL, orphanRemoval =

我知道有几十个问题都是同一个主题,但我不明白为什么它们在我的案例中不起作用

我有两个表,一个表名为Account,另一个表名为CustomerRelations,它们之间有一对多的关系,一个帐户可以属于多个CustomerRelations。。。帐户可以不存在其他客户关系,但客户关系只能附加到现有帐户

这是在我的实体类中注释它们的方式:

科目表:

@OneToMany(mappedBy = "account", cascade = CascadeType.ALL, orphanRemoval = true)
@OnDelete(action = OnDeleteAction.CASCADE)
private List<CustomRel> customRels = new ArrayList<>();
我有一个业务逻辑,我想根据Account选项卡中保存的特定日期调用查询:

@NamedQuery(name = Account.FIND_BY_ACC_NBR, query = "select acc from Account acc where acc.accountNumber =:accountNumber")
此查询提供account表中的正确数据,但对于customerRels字段,我得到以下异常:

**Unable to evaluate the expression Method threw 'org.hibernate.LazyInitializationException' exception.**
在my Account对象上调用getter方法时也是如此:

在我的示例中,有一个account对象的customerRels列表为空。因此,连接到accountId的数据库中没有customerRels记录

据我所知,我的Account实体类中的fetchType默认为lazy,对吗

在创建表的SQL脚本中,CustomerRelations表中只添加了一个account_id,account表中没有对子对象的引用


我知道这是一个很平常的问题,但我需要一些帮助。我应该修改我的JPQL查询吗?

OneToMany默认为惰性,您正在访问hibernate会话运行事务之外的集合。即使列表为空,也需要选择来初始化惰性集合。持久性无法知道集合中是否有项,除非它签入数据库

选项:

FetchType.EAGER 在JPQL中加入fetchrels r 初始化事务/会话内的集合
OneToMany默认为惰性,您正在访问hibernate sessionrunning事务之外的集合。即使列表为空,也需要选择来初始化惰性集合。持久性无法知道集合中是否有项,除非它签入数据库

选项:

FetchType.EAGER 在JPQL中加入fetchrels r 初始化事务/会话内的集合
FetchType.Earge解决了我的问题。另外,我必须将@JoinColumn添加到我的manytone实体字段中。非常感谢。FetchType.Earge解决了我的问题。另外,我必须将@JoinColumn添加到我的manytone实体字段中。非常感谢。
**Unable to evaluate the expression Method threw 'org.hibernate.LazyInitializationException' exception.**