【问题标题】:How to store non-entity objects into a database with JPA? (Play Framework)如何使用 JPA 将非实体对象存储到数据库中? (播放框架)
【发布时间】:2013-04-23 14:28:57
【问题描述】:

我正在开发一个使用长轮询的“某种”聊天应用程序。

我正在使用 Play Framework 1.2.5,并且我正在尝试使用 JPA 处理将其信息存储在数据库中的多个对话。

为了收听每个事件并将其发布到聊天中(有人加入、离开或发短信),我使用了 ArchivedEventStream 类型的对象,但由于该对象不是实体,Play Framework 没有在数据库中找不到适合他的类型。

目前,我制作了一个静态 HashMap,其中每个对话的模型 ID 作为键,我的 ArchivedEventStream 对象与事件。我在其中添加了@Transient 注释,因为它没有将我的地图计入数据库并规避错误。

@Transient
public final static HashMap<Long, ArchivedEventStream<PlayEvent>> playEvents =  new HashMap<Long, F.ArchivedEventStream<PlayEvent>>();

它目前有效,许多人可以按照自己的流量使用自己的对话,但过了一段时间,服务器会破坏这个静态变量,产生一些 NullPointerExceptions。

有没有办法将此对象存储到我的数据库中,以便每次对话都可以访问它?

或者,我可以阻止我的服务器 Play 销毁我的变量吗?

甚至,还有其他更好的选择来解决这个问题吗?

非常感谢。

【问题讨论】:

    标签: jpa playframework long-polling


    【解决方案1】:

    使用 Play 存储状态的最佳方式是在缓存中。 但是,这并不能保证您的事件始终可用(服务器重启、ttl...)

    如果您需要这些事件永久可用,您将需要将它们持久化,可能保存到数据库中。 您可以获取 ArchivedEventStream 实现模型,将它们存储在缓存中,并在缓存未命中时从数据库中检索它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-11
      • 1970-01-01
      • 1970-01-01
      • 2015-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多