Hibernate Seam对话中的休眠会话增长过大

Hibernate Seam对话中的休眠会话增长过大,hibernate,seam,Hibernate,Seam,我们将Seam对话用于跨多个页面的向导,其中一些屏幕加载大量数据供用户选择(可能是数千条记录)。Hibernate会话保留了所有内容,这对内存使用和性能都是一个问题(因为刷新需要几秒钟) 我们唯一的选择是在加载数据时逐出数据,还是有更好的方法来管理它?如果您的屏幕在会话中保留数千条记录(显然,这取决于这些记录的大小),那么您肯定会遇到问题 如何解决这个问题取决于许多因素 是应用程序范围的数据可以存储在一个地方吗 您可以在Hibernate级别(如ehcache)或在 …位于应用程序和数据库之间

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


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

如果您的屏幕在会话中保留数千条记录(显然,这取决于这些记录的大小),那么您肯定会遇到问题

如何解决这个问题取决于许多因素

  • 是应用程序范围的数据可以存储在一个地方吗
  • 您可以在Hibernate级别(如ehcache)或在
  • …位于应用程序和数据库之间的外部缓存
  • 您是否需要保留这些记录中的所有数据,或者一小部分(如id和标签)就足够了

等等。

如果您的屏幕在会话中保留数千条记录(显然,这取决于这些记录的大小),那么您肯定会遇到问题

如何解决这个问题取决于许多因素

  • 是应用程序范围的数据可以存储在一个地方吗
  • 您可以在Hibernate级别(如ehcache)或在
  • …位于应用程序和数据库之间的外部缓存
  • 您是否需要保留这些记录中的所有数据,或者一小部分(如id和标签)就足够了

等等。

您不必在对话中保存所有内容

只需保留用户插入的数据,并使用事件范围进行查询,每次访问向导页面时都进行查询


不要保留查询结果。

您不必在对话中保存所有内容

只需保留用户插入的数据,并使用事件范围进行查询,每次访问向导页面时都进行查询


只是不要保留查询结果。

数据使用ehcache在Hibernate级别缓存,但加载时仍会在Hibernate会话中结束。我们确实需要所有这些数据。目前,我们正在尝试使用仅存在于服务调用周围的第二个Hibernate会话,但不确定它是否是最佳选项。数据使用ehcache在Hibernate级别进行缓存,但加载时仍会在Hibernate会话中结束。我们确实需要所有这些数据。目前,我们正在尝试使用第二个Hibernate会话,该会话仅存在于服务调用周围,但不确定它是否是最佳选项。查询结果不会被放入会话中,Hibernate会话保留结果,Seam将Hibernate会话保留在对话中。查询结果未放入对话中,Hibernate会话保留结果,Seam将Hibernate会话保留在对话中。