2011-09-21 80 views
2

我们正在使用跨多个页面的向导的Seam对话,其中一些屏幕会为用户选择加载大量数据(可以是几千条记录)。 Hibernate会话保留所有内容,这对内存使用和性能都是一个问题(因为刷新需要几秒钟的时间)。Seam会话中的休眠会话变得太大

是我们加载数据时唯一的选择吗?还是有更好的方法来管理它?

回答

0

如果您的屏幕在会话中保留了几千条记录(显然取决于这些记录的大小)长时间,当然,您将遇到问题。

如何解决问题取决于很多因素。

  • 它可以存储在一个地方的应用程序范围的数据?
  • 你可以缓存它在休眠级别(如ehcache),或在...
  • ...一个外部缓存位于应用程序和数据库之间?
  • 是否需要保留全部这些记录中的数据,还是只需要一个小子集(如ID和标签)就足够了?

等等

+0

使用ehcache将数据缓存在Hibernate级别,但它在加载时仍然会在Hibernate会话中结束。我们确实需要所有的数据。目前我们正在尝试使用仅存在于服务调用周围的第二个Hibernate会话,但不确定它是否是最佳选项。 – David

0

您不必保存一切在交谈。

只保留用户插入的数据并为查询使用Event范围,并在每次访问向导页面时进行查询。

只是不保留查询的结果。

+0

查询结果没有放入对话中,Hibernate会话保持结果,Seam保持Hibernate会话处于对话状态。 – David