集合为空时出现 OneToMany LazyInitializationException
OneToMany LazyInitializationException when collection is empty
我知道有几十个主题相同的问题,但我不明白为什么它们对我的情况不起作用。
我有两个 table,一个是 Account,一个是 CustomerRelations,它们之间是一对多的关系(一个账户可以属于多个 customerRelations...帐户可以在没有其他客户关系的情况下存在,但客户关系只能附加到现有帐户)
这就是它们在我的实体中的注释方式 classes:
帐号table:
@OneToMany(mappedBy = "account", cascade = CascadeType.ALL, orphanRemoval = true)
@OnDelete(action = OnDeleteAction.CASCADE)
private List<CustomRel> customRels = new ArrayList<>();
客户关系table:
@ManyToOne(fetch = FetchType.EAGER)
private Account account;
我有业务逻辑,我想根据保存在“帐户”标签中的特定日期调用查询:
@NamedQuery(name = Account.FIND_BY_ACC_NBR, query = "select acc from Account acc where acc.accountNumber =:accountNumber")
此查询提供了来自帐户 table 的正确数据,但对于 customerRels 字段,我得到以下异常:
**Unable to evaluate the expression Method threw 'org.hibernate.LazyInitializationException' exception.**
在我的 Account 对象上调用 getter 方法时也是如此:
在我的例子中,有一个客户对象的空列表。所以数据库中没有customerRels记录是连接到accountId的。
据我所知,我的帐户实体 class 中的 fetchType 是惰性的 - 作为默认设置,对吗?
在创建 table 的我的 SQL 脚本中,只有一个 account_id 添加到 CustomerRelations table 中,在帐户 table 没有对子对象的引用。
我知道这是一个非常老生常谈的问题,但我需要一些帮助。我应该修改我的 JPQL 查询吗?
OneToMany 默认为 LAZY,您正在休眠会话之外访问集合(运行 事务)。即使列表是空的,也需要 select 来初始化惰性集合。 Persistence 无法知道集合中是否有项目,除非它在 DB 中检查。
选项:
- FetchType.EAGER
join fetch rels r
在你的 JPQL
- 初始化集合 transaction/session
我知道有几十个主题相同的问题,但我不明白为什么它们对我的情况不起作用。
我有两个 table,一个是 Account,一个是 CustomerRelations,它们之间是一对多的关系(一个账户可以属于多个 customerRelations...帐户可以在没有其他客户关系的情况下存在,但客户关系只能附加到现有帐户)
这就是它们在我的实体中的注释方式 classes:
帐号table:
@OneToMany(mappedBy = "account", cascade = CascadeType.ALL, orphanRemoval = true)
@OnDelete(action = OnDeleteAction.CASCADE)
private List<CustomRel> customRels = new ArrayList<>();
客户关系table:
@ManyToOne(fetch = FetchType.EAGER)
private Account account;
我有业务逻辑,我想根据保存在“帐户”标签中的特定日期调用查询:
@NamedQuery(name = Account.FIND_BY_ACC_NBR, query = "select acc from Account acc where acc.accountNumber =:accountNumber")
此查询提供了来自帐户 table 的正确数据,但对于 customerRels 字段,我得到以下异常:
**Unable to evaluate the expression Method threw 'org.hibernate.LazyInitializationException' exception.**
在我的 Account 对象上调用 getter 方法时也是如此:
在我的例子中,有一个客户对象的空列表。所以数据库中没有customerRels记录是连接到accountId的。
据我所知,我的帐户实体 class 中的 fetchType 是惰性的 - 作为默认设置,对吗?
在创建 table 的我的 SQL 脚本中,只有一个 account_id 添加到 CustomerRelations table 中,在帐户 table 没有对子对象的引用。
我知道这是一个非常老生常谈的问题,但我需要一些帮助。我应该修改我的 JPQL 查询吗?
OneToMany 默认为 LAZY,您正在休眠会话之外访问集合(运行 事务)。即使列表是空的,也需要 select 来初始化惰性集合。 Persistence 无法知道集合中是否有项目,除非它在 DB 中检查。
选项:
- FetchType.EAGER
join fetch rels r
在你的 JPQL- 初始化集合 transaction/session