从Spring Boot 1.5迁移到2.0后访问枚举时出现LazyInitializationException

时间:2019-04-27 21:35:00

标签: java spring hibernate spring-boot spring-data-jpa

我有实体

@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!

0 个答案:

没有答案