是否有任何特定配置将实体从不同的持久性单元放入当前映射?
例如:
@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;
}
提前致谢。
答案 0 :(得分:1)
我认为你不能直截了当地做到这一点。持久性单位意味着明显分开;他们有不同的实体经理,所以他们很可能(这通常是因为不同的数据库或模式)。
你仍然可以在 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
的副本并将其合并到所需的持久化上下文中。
答案 1 :(得分:0)
MaDa是对的。我对这个问题做出了这个答案,只是为了解决这个问题。
首先,我们到目前为止,我们不能在实体B中保持实体A的实例,而A和B来自不同的持久性单元。 使其正常工作的一种安全方法是使实体A的实例变为@Transient,然后永远不会进行更改以使该实例与数据库绑定。但是,手动设置实体(setter和getter)之间的关系会有点痛苦,这会成为一个悬而未决的问题。
再次感谢Mada。