(如何)是否可以将JPA实体持久保存在多个服务器的数据库中,而无需将所有内容复制到DTO?
我们有一个分布式系统。某些应用程序确实有用于缓存目的的DB。 JPA Provider抛出一个异常,它抱怨它不能持久保存分离的对象。
但我想保留实体的ID,只需将其保留在这个额外的数据库中。
(JPA 1.2,EJB 3.0,Glassfish v2.1,Toplink Essentials)
答案 0 :(得分:3)
不要em.persist(obj),只是em.merge(obj)。合并适用于附加和分离的对象。
如果您从一个分离的对象开始,我会将该对象与相应的EntityManagers合并。如果你试图在对象中保持身份密钥相同,我会从合并的第一个对象中提取密钥,并在将来使用它。
您可能(我不知道)不想做的是尝试合并由一个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);
这样的事情应该可行。