java - 在@Transactional 上下文中在@RestController 中执行的Hibernate 查询

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

我正在 spring boot 2.0 中编写一个应用程序,并且我有一个实体 JPA 的响应,该实体 JPA 映射了嵌套对象依赖性。

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

我注意到当对象在 Controller 中(超出事务边界)时,hibernate 执行查询以获取嵌套对象(延迟定义的对象引用)

这怎么可能?

最佳答案

在 spring boot 中,Open Session in View 是默认启用的。

你必须在 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 parent占用

关于java - 在@Transactional 上下文中在@RestController 中执行的Hibernate 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52626999/

相关文章:

java - Spring xml到java配置: how to convert nested xml bean definition

java - Maven和Eclipse远程调试: connection refused

java - 从 Java 恢复 MySQL 突然停止,没有任何消息并挂起

java - 帮助在 Swing 中绘制自定义图形

java - 在 Java 中处理重复的正则表达式组名称(C# 翻译)

java - : "Building" 期间发生内部错误

java.lang.reflect.InvocationTargetException : null 异常

java - 5 秒后删除 JLabel 中的文本?

java - Spring 中带有 url 模式重定向的上下文路径

spring - 如何使用Spring Security Core插件在Grails应用程序中忘记密码?