4

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

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

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

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

4

1 回答 1

4

不要 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);

像这样的东西应该可以正常工作。

于 2009-06-02T17:22:24.083 回答