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

问题描述 投票:0回答:1

我正在 Spring Boot 2.0 中编写一个应用程序,并且我有一个带有嵌套对象依赖关系映射的实体 JPA 的响应。

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

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

怎么可能?

java spring spring-boot transactions hibernate-5.x
1个回答
4
投票

在 Spring Boot 中,默认启用“在视图中打开会话”。

您必须在

application.properties

中禁用它

spring.jpa.open-in-view=false

因为 jackson 也可以尝试序列化引用的 Lazy 定义的对象,所以您需要为 hibernate5 添加 jackson 数据类型(因为您使用的是 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 父级采用

© www.soinside.com 2019 - 2024. All rights reserved.