服务方法返回一个像这样的对象
return entityManager.find(Event.class, id);
在@ViewScoped bean里面
Event对象有大约40个字段,其中一些映射到@ManyToMany。
当我使用JavaScript打开PrimeFaces对话框时,Hibernate运行它用于生成初始页面的所有相同查询。每当我在调用bean的页面上做任何事情时,Hibernate都会再次运行所有查询。不仅如此,相同的SELECT查询在日志中重复了几十次。我已经尝试将FetchType从EAGER更改为LAZY并再次返回,没有任何更改。我尝试从持久化上下文中分离我的对象,但后来我的懒惰集合没有被加载。经过彻底的Google搜索后,我无法找到任何相关问题。此外,Hibernate实际上并没有抛出异常,它只是运行缓慢,因为它在信息已经加载到内存后不必要地查询数据库。
我在想有一些简单的事情,我一路上做错了,我希望StackOverflow的优秀人员可以指出我正确的方向,任何人?
如果我在此处未提供足够的信息,请向我询问可能需要的任何相关数据以便解决问题。
答案 0 :(得分:0)
服务器端没有任何东西会导致hibernate缓存它检索到的内容。因此,对服务器的每个请求都将导致hibernate检索相关对象。如果要减少此值,可以使用二级缓存。然后将缓存PK的检索。
请记住,在群集中使用二级缓存时需要群集缓存解决方案。