gpt4 book ai didi

java - LazyInitializationException 使用带有 @Basic(fetch = FetchType.LAZY) 的 hibernate 增强

转载 作者:行者123 更新时间:2023-12-03 21:00:08 24 4
gpt4 key购买 nike

我有一个带有 lob 字段的持久实体,它会被急切地获取,所以我配置了 hibernate-enhance-maven-plugin 并使它变得懒惰:

@Lob
@Column(name = "MY_FIELD")
@Basic(fetch = FetchType.LAZY)
private byte[] lazyField;

现在我在一个相当简单的测试中得到 LazyInitializationException :

myJpaRepo.findAll().get(0).getLazyField()

Unable to perform requested lazy initialization [MyEntity.lazyField] - no session and settings disallow loading outside the Session



我使用 Spring Boot 并且没有做任何特定于配置 hibernate 的事情。
此测试使用 h2 数据库。

MyRepo 使用@Transactional 进行注释。

如果我还注释了执行方法,则不会抛出异常:

@Transactional
public void test(){
myJpaRepo.findAll().get(0).getLazyField()
}

每次有人尝试获取惰性字段时,我是否都需要将其注释为事务性的,或者我可以做些什么来避免这种情况?

最佳答案

错误表示您正在尝试访问 hibernate session /事务边界之外的关联。

在这种情况下,您还必须使用 @transaction 注释测试方法,以便您完全处于事务边界内并拥有 Activity 的 hibernate session 。

关于java - LazyInitializationException 使用带有 @Basic(fetch = FetchType.LAZY) 的 hibernate 增强,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58646564/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com