Hibernate 如何混合域对象的持久状态和瞬态?

Hibernate 如何混合域对象的持久状态和瞬态?,hibernate,object,persistence,Hibernate,Object,Persistence,我正在寻找一种模式/方法,以彻底解决以下问题: 在屏幕显示应用程序中(各种信息显示在公共场所的LCD屏幕上),我有Hibernate持久POJO,可以在我的应用程序的管理部分创建和更新 在只读的“显示”部分,我使用这些对象。它们必须始终是持久状态的最新状态,但它们也有一个瞬态(从未存储在数据库中),其寿命为整个用户(HTTP)会话(可以持续一整天或更长时间)和特定于每个会话/用户的(这里的“用户”是一个屏幕) 如何(干净地)组合这两种状态以保持内存中的瞬态(在HTTP会话中),同时定期从数据库刷

我正在寻找一种模式/方法,以彻底解决以下问题:

在屏幕显示应用程序中(各种信息显示在公共场所的LCD屏幕上),我有Hibernate持久POJO,可以在我的应用程序的管理部分创建和更新

在只读的“显示”部分,我使用这些对象。它们必须始终是持久状态的最新状态,但它们也有一个瞬态(从未存储在数据库中),其寿命为整个用户(HTTP)会话(可以持续一整天或更长时间)和特定于每个会话/用户的(这里的“用户”是一个屏幕)


如何(干净地)组合这两种状态以保持内存中的瞬态(在HTTP会话中),同时定期从数据库刷新持久状态?使用相同的类并在需要时执行Hibernate会话.refresh()?将这两种状态存储在不同的类中,并将它们链接起来,例如使用ID?装饰图案?

我不太明白。如果对象是只读的,什么样的信息是暂时的?如果对象是只读的,那么在所有会话中它将始终相同。也许您的意思是对象不是只读的,但它不会被持久化回服务器

我不太明白。如果对象是只读的,什么样的信息是暂时的?如果对象是只读的,那么在所有会话中它将始终相同。也许您的意思是对象不是只读的,但它不会被持久化回服务器

在应用程序的这一部分中,某些字段是持久的、只读的。其他一些不是持久的(如此短暂),而是表示一种(不断变化的)状态,它跨越用户的会话,并且对于每个会话都是不同的。我希望这样更清楚!如果“瞬态”字段不是持久的,而是特定于会话的,那么您应该考虑使用状态会话bean(EJB)。通过这种方式,服务器负责将特定的SFSB交付给客户端,并且可以在会话过期(或关闭)时清除这些SFSB。这里唯一的“问题”是,似乎你在同一个实例中有这两个信息。我认为这并不理想,因为你们可能在混合担忧。但是如果我不知道你的问题的细节,我就不能这么说。谢谢!但我现在并没有切换到EJB:)我现在的解决方案是:将Hibernate POJO存储在HTTP会话中。这将在用户会话中保持“瞬态”状态。然后,当我需要重新读取持久状态时,我将调用hibernate的session.refresh。当我对每个HTTP请求使用不同的hibernate会话时,我可以拥有同一个持久对象的多个实例,因为持久对象仅在hibernate会话范围内是唯一的。我会更新你的答案,但我不能接受。很抱歉,在应用程序的这一部分中,有些字段是持久的,并且是只读的。其他一些不是持久的(如此短暂),而是表示一种(不断变化的)状态,它跨越用户的会话,并且对于每个会话都是不同的。我希望这样更清楚!如果“瞬态”字段不是持久的,而是特定于会话的,那么您应该考虑使用状态会话bean(EJB)。通过这种方式,服务器负责将特定的SFSB交付给客户端,并且可以在会话过期(或关闭)时清除这些SFSB。这里唯一的“问题”是,似乎你在同一个实例中有这两个信息。我认为这并不理想,因为你们可能在混合担忧。但是如果我不知道你的问题的细节,我就不能这么说。谢谢!但我现在并没有切换到EJB:)我现在的解决方案是:将Hibernate POJO存储在HTTP会话中。这将在用户会话中保持“瞬态”状态。然后,当我需要重新读取持久状态时,我将调用hibernate的session.refresh。当我对每个HTTP请求使用不同的hibernate会话时,我可以拥有同一个持久对象的多个实例,因为持久对象仅在hibernate会话范围内是唯一的。我会同意你的回答,但我不能接受。对不起。。。