我有实体
@Entity
public class MyEntity {
@Id
Long id;
@Column
@Enumerated(EnumType.STRING)
Status status;
@Column
Integer value;
public Status getStatus() {
return status;
}
public Integer getValue() {
return value;
}
}
public enum Status {
CREATED, DELETED
}
有一个JpaRepository
:
public interface MyEntityRepository extends JpaRepository<MyEntity, Long> {}
现在,有一个测试用例(任何事务之外):
MyEntity entity = doSomeBusinesLogic();
entity = myEntityRepository.getOne(entity.getId());
assertEquals(1, entity.getValue()); // Works fine
assertEquals(Status.CREATED, entity.getStatus()); // Throws exception
因此,对Integer
的访问可以正常工作,但对枚举的访问将抛出org.hibernate.LazyInitializationException
。
从Spring Boot 1.5(带有Hibernate 5.0)迁移到Spring Boot 2.0(带有Hibernate 5.2)之后,出现了这个错误。
一种可行的解决方案是在只读事务内部执行以上代码。但是我需要了解为什么?为何将其从Spring Boot 1.5更改为2.0?
有什么想法吗? TIA!