集合为空时,OneToMany LazyInitializationException

时间:2019-03-11 22:13:44

标签: hibernate jpa jpql eager

我知道有数十个主题相同的问题,但我无法弄清楚为什么它们在我的案例中不起作用。

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

这是在我的实体类中对其进行注释的方式:

帐户表:

@OneToMany(mappedBy = "account", cascade = CascadeType.ALL, orphanRemoval = true)
@OnDelete(action = OnDeleteAction.CASCADE)
private List<CustomRel> customRels = new ArrayList<>();

CustomerRelation表:

@ManyToOne(fetch = FetchType.EAGER)
private Account account;

我具有要根据“帐户”表中保存的特定日期来调用查询的业务逻辑:

@NamedQuery(name = Account.FIND_BY_ACC_NBR, query = "select acc from Account acc where acc.accountNumber =:accountNumber")

此查询从帐户表中提供了正确的数据,但对于字段customerRels,我得到以下异常:

**Unable to evaluate the expression Method threw 'org.hibernate.LazyInitializationException' exception.**

在我的Account对象上调用getter方法时也是如此:

enter image description here

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

据我所知,我的Account实体类中的fetchType是惰性的-默认情况下,对吧?。

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

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

0 个答案:

没有答案