作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Hibernate EntityManager,并且在我的 Hibernate 查询中遇到了奇怪的减速。看看这段代码:
public void testQuerySpeed() {
for(int i = 0; i < 1000; i++) {
em.createNativeQuery("SELECT 1").getResultList();
}
}
public void testQuerySpeed() {
CommercialContact contact = em.find(CommercialContact.class, 1890871l);
for(int i = 0; i < 1000; i++) {
em.createNativeQuery("SELECT 1").getSingleResult();
}
}
em.clear()
后
em.find()
,问题又消失了,运行时间又回到了 750 毫秒。
最佳答案
我还必须推荐使用 JVM 分析器来查看时间的去向。为 Hibernate session 打开 SQL 语句日志记录也可能没有坏处,只是为了确保您运行的 SQL 没有超出您的想象。
这里首先想到的是 Hibernate Session 的“刷新”行为。您是否在 Session 上明确设置了特定的刷新模式?如果没有,那么你会得到“自动”刷新,它会检查你在 session 中拥有的对象,以确定内存中是否有需要“刷新”回数据库的更改(在事务内部) , 当然)。
我想首先尝试查看它是否有任何效果的最简单的方法是修改上面显示的测试代码,以指定您希望在提交数据库事务时手动进行刷新:
public void testQuerySpeed() {
em.setFlushMode(FlushModeType.COMMIT); // assuming you're using JPA annotations
CommercialContact contact = em.find(CommercialContact.class, 1890871l);
for(int i = 0; i < 1000; i++) {
em.createNativeQuery("SELECT 1").getSingleResult();
}
}
关于在 session 中加载实体后,Hibernate 查询会显着减慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1791050/
我是一名优秀的程序员,十分优秀!