繁体   English   中英

JPA实体映射来自不同的持久单元

[英]JPA entity mapping from different persistent unit

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

例如:

@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;
}

提前致谢。

我认为你不能直截了当地做到这一点。 持久性单位意味着明显分开; 他们有不同的实体经理,所以他们很可能(这通常是因为不同的数据库或模式)。

您仍然可以定义相同的实体类存在于一些持久性单元,在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副本并将其合并到所需的持久化上下文中。

妈妈是对的。 我对这个问题的回答只是为了解决这个问题。

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

再次感谢Mada。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM