Hibernate - 为什么调试日志中有多个重复的select语句?

时间:2013-01-18 16:35:34

标签: hibernate jsf jpa primefaces entitymanager

服务方法返回一个像这样的对象

return entityManager.find(Event.class, id);

在@ViewScoped bean里面

Event对象有大约40个字段,其中一些映射到@ManyToMany。

当我使用JavaScript打开PrimeFaces对话框时,Hibernate运行它用于生成初始页面的所有相同查询。每当我在调用bean的页面上做任何事情时,Hibernate都会再次运行所有查询。不仅如此,相同的SELECT查询在日志中重复了几十次。我已经尝试将FetchType从EAGER更改为LAZY并再次返回,没有任何更改。我尝试从持久化上下文中分离我的对象,但后来我的懒惰集合没有被加载。经过彻底的Google搜索后,我无法找到任何相关问题。此外,Hibernate实际上并没有抛出异常,它只是运行缓慢,因为它在信息已经加载到内存后不必要地查询数据库。

我在想有一些简单的事情,我一路上做错了,我希望StackOverflow的优秀人员可以指出我正确的方向,任何人?

如果我在此处未提供足够的信息,请向我询问可能需要的任何相关数据以便解决问题。

1 个答案:

答案 0 :(得分:0)

服务器端没有任何东西会导致hibernate缓存它检索到的内容。因此,对服务器的每个请求都将导致hibernate检索相关对象。如果要减少此值,可以使用二级缓存。然后将缓存PK的检索。

请记住,在群集中使用二级缓存时需要群集缓存解决方案。