【发布时间】:2020-02-27 00:04:44
【问题描述】:
我有一个带有 lob 字段的持久实体,它会被急切地获取,所以我配置了 hibernate-enhance-maven-plugin 并使它变得懒惰:
@Lob
@Column(name = "MY_FIELD")
@Basic(fetch = FetchType.LAZY)
private byte[] lazyField;
现在我在一个相当简单的测试中得到 LazyInitializationException:
myJpaRepo.findAll().get(0).getLazyField()
无法执行请求的延迟初始化 [MyEntity.lazyField] - 没有会话和设置不允许在会话外加载
我使用 Spring Boot,并没有做任何特定的配置休眠。 此测试使用 h2 数据库。
MyRepo 使用@Transactional 进行注释。
如果我也注释了执行方法,则不会抛出异常:
@Transactional
public void test(){
myJpaRepo.findAll().get(0).getLazyField()
}
每次有人尝试获取惰性字段时,我是否需要将其注释为事务性的,还是我可以采取其他措施来避免这种情况?
【问题讨论】:
标签: java hibernate spring-boot