|
11
|
| Alexander Malfait · 技术社区 · 16 年前 |
|
|
1
14
我还建议使用JVM分析器来查看时间的走向。为Hibernate会话打开SQL语句日志记录,只是为了确保您运行的SQL没有超出您的想象,这可能也没有什么坏处。 首先想到的是Hibernate会话的“刷新”行为。您是否在会话上明确设置了特定的刷新模式?如果没有,那么您将得到“自动”刷新,这将对会话中的对象进行一定量的检查,以确定内存中是否有需要“刷新”回数据库的更改(当然是在事务内部)。
我的另一个想法是询问您是否可以在一个单独的EntityManager中执行批量任务,如果您只是在进行更新或插入,它就可以工作。 |
|
|
2
5
我基本上遇到了相同的问题(在循环中查询)。我用JProfiler进行了一次分析验证……我感兴趣的方法的执行耗时572秒,hibernate脏检查耗时457秒(约80%)。太棒了,不是吗?我必须说,我有很多实体由EntityManager管理。如果我在有问题的代码中引入em.flush()/em.clear()或em.setFlushMode(FlushModeType.COMMIT),性能问题就会消失。 http://img1.imagilive.com/0110/hibernate_dirty_checking_bad_perfomances0ce.png |
|
|
3
1
您执行的本机查询没有说明它将涉及什么,因此Hibernate必须(为了一致性起见)对它所知道的所有表中的所有数据进行flush()(并且您的单个find()可能已经获取了不止一个对象,因此它可能不是一个简单的操作)。
|
|
|
africandrogba · 如何在表达式中进行算术运算? 8 年前 |
|
|
JoeyH · 在grails中对哪个域对象执行查询重要吗 8 年前 |
|
|
KnechtRootrecht · HQL自定义订单ASC和DESC 8 年前 |
|
|
Allloush · @事务性不使用HQL或SQL更新记录 8 年前 |
|
|
Ian Pert · 子字符串上的HQL联接 8 年前 |