java – 如何防止Hibernate在列表中刷新?
发布时间:2020-12-15 02:55:08 所属栏目:Java 来源:网络整理
导读:我有一个简单的Hibernate查询,如: from MyEntity where name = ? 没有什么花哨的,但它在一次相当大的交易中被多次调用(持续一秒钟,可能会加载数十个或数百个实体). Profiler显示花费了大量时间: org.hibernate.internal.SessionImpl.autoFlushIfRequired(S
我有一个简单的Hibernate查询,如:
from MyEntity where name = ? 没有什么花哨的,但它在一次相当大的交易中被多次调用(持续一秒钟,可能会加载数十个或数百个实体). Profiler显示花费了大量时间: org.hibernate.internal.SessionImpl.autoFlushIfRequired(SessionImpl.java:1185) org.hibernate.internal.SessionImpl.list(SessionImpl.java:1240) org.hibernate.internal.QueryImpl.list(QueryImpl.java:101) 换句话说 – 在运行实际查询之前刷新更改. 我可以以某种方式阻止Hibernate完成这个冲洗吗? 如果没有,我该怎么做才能让它更快? 解决方法
默认情况下,hibernate在会话期间(FlushMode.AUTO)发出查询之前会刷新,并且会占用大量的CPU时间.如果您的会话中交替运行许多查询和更新,则会特别痛苦.
如果查询可能选择在当前会话期间插入/更新/删除的后退数据,则需要进行这些刷新.即使您没有修改当前事务中的任何内容,但使用的是事务隔离级别(如read-uncommitted),也可能出现这种情况. 假设您不想要未提交的读取等,我知道有两种解决方法: >在进行任何修改之前,选择会话期间您需要的所有内容(即,重新排序以便在进行任何修改之前发出所有查询). Query query = session.getNamedQuery(SOME_QUERY_NAME); query.setFlushMode(FlushMode.COMMIT); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |