Java 在@RestController中执行的Hibernate查询脱离@Transactional上下文

Java 在@RestController中执行的Hibernate查询脱离@Transactional上下文,java,spring,spring-boot,transactions,hibernate-5.x,Java,Spring,Spring Boot,Transactions,Hibernate 5.x,我正在SpringBoot2.0中编写一个应用程序,在中,我有一个实体JPA的响应,该实体映射了嵌套的对象依赖关系 我加载一个返回到@RestController并包含在响应服务中的实体 我注意到,当对象位于控制器中(超出事务边界)时,hibernate执行一个查询,以获取嵌套的对象引用(惰性定义的对象引用) 这怎么可能呢?在spring boot中,视图中的打开会话在默认情况下处于启用状态 您必须在application.properties中禁用它 spring.jpa.openin-vie

我正在SpringBoot2.0中编写一个应用程序,在中,我有一个实体JPA的响应,该实体映射了嵌套的对象依赖关系

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

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


这怎么可能呢?

在spring boot中,视图中的打开会话在默认情况下处于启用状态

您必须在
application.properties中禁用它

spring.jpa.openin-view=false

因为jackson还可以尝试序列化引用的惰性定义对象,所以需要为hibernate5添加jackson数据类型(因为您使用的是spring boot 2)

在pom.xml中

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

com.fasterxml.jackson.datatype
jackson-datatype-hibernate5

没有版本,因为它将由spring boot父级执行

您如何确定它已退出活动会话?您可以发布一些代码片段吗?默认情况下,视图中的open session会保持活动会话,直到独立返回响应。
<dependency>
        <groupId>com.fasterxml.jackson.datatype</groupId>
        <artifactId>jackson-datatype-hibernate5</artifactId>
</dependency>