4

是否有任何特定配置可以将来自不同持久性单元的实体放入当前映射?

例如:

@RooJpaActiveRecord(persistenceUnit = "persistenceUnit_central")
public class UserGroups{

    //users come from `persistenceUnit_client`
    //how to work this out?
    //can mappedBy and targetEntity works the same way
    //as they are in the same persistence unit?
    @OneToMany
    private List<User> users;
}

提前致谢。

4

2 回答 2

2

我不认为你不能直接做到这一点。持久性单元意味着明显分开;他们有不同的实体管理器,所以他们很可能(这通常是原因)来自不同的数据库或模式。

您仍然可以在 persistence.xml 中定义相同的实体类以存在于多个持久性单元中但是,正如我所说,它将由每个管理器单独处理。这意味着你不能这样做:

UserGroups ug = em1.find(UserGroups.class, ...); // entity manager 1
User u = em2.find(User.class, ...); // entity manager 2

// exception will be thrown on commit 
// - from the point of view of em1, "u" is detached
ug.getUsers().add(u); 

我不确定打电话em1.merge(u)是否能解决问题——我还没有遇到过这种情况。但是您肯定可以创建一个副本User并将其合并到所需的持久性上下文中。

于 2012-10-04T21:31:06.753 回答
0

玛达是对的。我对这个问题的回答只是为了突出这个问题的解决方案。

首先,到目前为止,我们无法在实体 B 中持久化实体 A 的实例,而 A 和 B 来自不同的持久化单元。使其正常工作的一种安全方法是使实体 A 的实例变为 @Transient,然后永远不会更改以使该实例与数据库相关联。但是,手动设置实体(setter 和 getter)之间的关系会有点痛苦,这成为一个悬而未决的问题。

再次感谢马达。

于 2012-10-17T20:53:49.617 回答