【问题标题】:How do i properly cache common objects / entities when using JPA?使用 JPA 时如何正确缓存常见对象/实体?
【发布时间】:2014-03-06 06:46:17
【问题描述】:

我有一个 Web 应用程序,它需要从我的数据库中的表中加载一些行作为对象,这些对象将在应用程序的各个地方重复使用。

例如,我可能会检索不经常更改的位置列表,因此我想将它们存储在内存中以便以后更快地访问。

接下来,在未来的请求中,我想将这些实体之一关联到数据库中的另一个实体;但是,JPA 在尝试保存时会抛出错误,因为缓存的实体已分离。

如何重新附加缓存的实体,以便将其包含在当前事务中?

我正在使用 Apache OpenJPA 实现。

【问题讨论】:

    标签: java jpa openjpa


    【解决方案1】:

    调用EntityManager.merge() 将重新附加一个分离的对象。

    看看这个内容丰富的page

    【讨论】:

    • 当我这样做时,似乎不喜欢该对象具有“ID”值。在我的实体上,ID 是 PK 并且有一个 @GeneratedValue 注释。错误是:The instance life cycle is in PNewState state and hence an existing non-default value for the identity field is not permitted. You either need to remove the @GeneratedValue annotation or modify the code to remove the initializer processing. 将 ID 设置为 0 会清除错误,但会导致该实体的新记录,这是我不想要的。现有记录需要关联。
    猜你喜欢
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    相关资源
    最近更新 更多