在@Transactional上下文之外的@RestController中执行的休眠查询

时间:2018-10-03 12:25:18

标签: java spring spring-boot transactions hibernate-5.x

我正在Spring Boot 2.0中编写一个应用程序,并且在其中我得到了一个带有嵌套对象依赖项映射的Entity JPA的响应。

我加载了一个实体,该实体返回到@RestController并包含在响应服务中。

我注意到当对象处于控制器中(超出事务边界)时,hibernate执行的查询会获取嵌套对象(惰性定义对象引用)

怎么可能?

1 个答案:

答案 0 :(得分:4)

在春季启动中,默认情况下启用了“在View中打开会话”。

您必须在application.properties

中将其禁用

spring.jpa.open-in-view=false

由于杰克逊还可以尝试序列化引用的Lazy定义的对象,因此您需要为hibernate5添加杰克逊数据类型(因为您使用的是Spring Boot 2)

@Bean
public Module hibernate5Module() {
    return new Hibernate5Module();
}

和您的pom.xml

<dependency>
        <groupId>com.fasterxml.jackson.datatype</groupId>
        <artifactId>jackson-datatype-hibernate5</artifactId>
</dependency>

没有版本,因为它将由spring-boot父级使用