防止hibernate在只读操作上刷新

时间:2018-06-18 16:14:08

标签: java hibernate spring-boot

我的操作繁重,只读。这全部由hibernate在spring引导应用程序中映射。 当没有任何类型的突变时,Hibernate花费6秒来刷新我的实体。这只是一个获取操作。

我试图阻止hibernate花费6秒钟,冗余地冲洗。

我将休眠刷新模式设置为MANUAL / NEVER。但它没有任何区别。

属性设置正确,但hibernate统计信息仍会显示刷新,计数和花费的时间。

1 个答案:

答案 0 :(得分:2)

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

@Transactional(readOnly = true)

对于Hibernate,它将JDBC事务设置为只读模式和FlushMode.NEVER。 详细信息如下:https://stackoverflow.com/a/1712328/5810648

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

  

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

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

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