(如何)是否可以在不将所有内容复制到 DTO 的情况下将 JPA 实体保存在多个服务器的数据库中?
我们有一个分布式系统。某些应用程序确实具有用于缓存目的的数据库。JPA 提供程序抛出一个异常,它抱怨它不能持久化一个分离的对象。
但我想保留实体的 ID,只需将其保存在这个额外的数据库中。
(JPA 1.2、EJB 3.0、Glassfish v2.1、Toplink Essentials)
(如何)是否可以在不将所有内容复制到 DTO 的情况下将 JPA 实体保存在多个服务器的数据库中?
我们有一个分布式系统。某些应用程序确实具有用于缓存目的的数据库。JPA 提供程序抛出一个异常,它抱怨它不能持久化一个分离的对象。
但我想保留实体的 ID,只需将其保存在这个额外的数据库中。
(JPA 1.2、EJB 3.0、Glassfish v2.1、Toplink Essentials)
不要 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);
像这样的东西应该可以正常工作。