1

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

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

在 @ViewScoped bean 内部

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

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

我在想有一些简单的事情我在此过程中做错了,我希望 StackOverflow 的优秀人员能够指出我正确的方向,有人吗?

如果我在这里没有提供足够的信息,请向我询问任何可能需要的相关数据来促进解决方案。

4

1 回答 1

0

服务器端没有任何东西会导致休眠缓存它检索到的内容。因此,对服务器的每个请求都会导致休眠检索相关对象。如果您想减少这种情况,您可以使用二级缓存。然后通过 PK 检索将被缓存。

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

于 2013-01-18T16:46:04.287 回答