首页 > 解决方案 > 防止休眠刷新只读操作

问题描述

我有一个繁重的操作,它是只读的。这一切都由休眠映射,在 Spring Boot 应用程序中。当没有任何类型的突变时,Hibernate 花费 6 秒刷新我的实体。这只是一个 get 操作。

我试图阻止休眠花费那 6 秒,冗余冲洗。

我将休眠刷新模式设置为手动/从不。但这没有任何区别。

该属性设置正确,但休眠状态仍显示刷新、计数和花费的时间。

标签: javahibernatespring-boot

解决方案


有几种方法可以做到这一点。您可以尝试: org.springframework.transaction.annotation.Transactional注释设置为只读:

@Transactional(readOnly = true)

在 Hibernate 的情况下,它将 JDBC 事务设置为只读模式和 FlushMode.NEVER。这里详细信息:https ://stackoverflow.com/a/1712328/5810648

此外,可以禁用setReadOnly(true)对 Hibernate 查询的脏检查调用或setHint("org.hibernate.readOnly", true)对 JPA 查询的调用。根据文档:

Hibernate 永远不会对它们进行脏检查或使更改持久化(例如 new Boolean(true) ),默认为 false

http://docs.jboss.org/hibernate/stable/entitymanager/reference/en/html/objectstate.html#d0e1215

另一种方法是对繁重的操作使用无状态会话。这是详细信息:https ://stackoverflow.com/a/5497077/5810648


推荐阅读