【问题标题】:How to persist the same JPA Entity at multiple databases (distributed system)?如何在多个数据库(分布式系统)中保留相同的 JPA 实体?
【发布时间】:2010-10-30 18:08:56
【问题描述】:

(如何)在不将所有内容复制到 DTO 的情况下,是否可以在多个服务器的数据库中持久保存 JPA 实体?

我们有一个分布式系统。一些应用程序确实有用于缓存目的的数据库。 JPA 提供程序抛出一个异常,它抱怨它不能持久化一个分离的对象。

但我想保留实体的 ID,只需将其保存在这个额外的数据库中。

(JPA 1.2、EJB 3.0、Glassfish v2.1、Toplink Essentials)

【问题讨论】:

    标签: jpa persistence glassfish ejb-3.0 toplink


    【解决方案1】:

    不要 em.persist(obj),只要 em.merge(obj)。合并适用于附加和分离的对象。

    如果您从一个分离的对象开始,我会将该对象与相应的 EntityManager 合并。如果您试图在对象之间保持相同的身份密钥,我会从第一个合并的对象中提取密钥,并在将来使用它。

    您可能(我不知道)不想做的是尝试将由一个 EM 管理的对象与另一个 EM 合并。你可以测试一下它是否有效,我只是不知道如果你尝试会发生什么。

    所以。

    YourEntity unattachedEntity = ... // your original entity object.
    
    YourEntity managedEntity = em1.merge(unattachedEntity);
    
    // managedEntity now has the primary key assigned by the DB
    unattacheEntity.setPrimaryKey(managedEntity.getPrimaryKey());
    
    em2.merge(unattachedEntity);
    em3.merge(unattachedEntity);
    

    类似的东西应该可以工作。

    【讨论】:

    • 非常感谢!它真的很有效!您的回答非常有帮助!我之前确实尝试过合并-但没有使用您使用这两个实体的魔术。
    猜你喜欢
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 2019-05-08
    • 2021-10-18
    • 1970-01-01
    • 2017-06-05
    • 2019-11-05
    相关资源
    最近更新 更多