JPA级联来自多个persistenceUnits的实体

时间:2015-02-09 15:00:20

标签: java hibernate jpa jpa-2.1

我在两个实体之间有单向关系:

*@Entity
public class XXX{
  @Id
  private Long Id;
  @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
  @JoinColumn(name = "YYY_ID")
  private YYY yyy;
}
@Entity
public class YYY{
   @Id
   private Long Id;

   private String someName;
}*

实体属于同一数据库中的不同模式(但我可能不使用synonims,或者给模式授予...),所以我有两个持久性单元:

1.persistenceUnit(xxx) - 实体xxx映射到那里

2.persistenceUnit(yyy) - 实体yyy映射到那里

我可以让jpa在其他持久性单元上自动执行级联吗? 例如:

@PersistenceContext(unitName = "xxx")
private EntityManager em;

XXX xxx = new XXX();
YYY yyy = new YYY();
yyy.setSomeName("just some name"):
xxx.setYYY(yyy);
em.persist(xxx);

这应该创建两个对象......

有可能吗?帮助赞赏。我在Jboss7上使用JPA2,Hibernate 4

1 个答案:

答案 0 :(得分:1)

JPA规范并未强制要求支持跨多个持久性单元的映射。

但是,根据您的数据库权限,您可以使用一个持久性单元并使用@Table批注为不在默认架构中的任何实体指定方案/目录。

@Entity
@Table(schema="xyz")
public class XXX{
  @Id
  private Long Id;
  @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
  @JoinColumn(name = "YYY_ID")
  private YYY yyy;
}

否则,您需要在数据库级别寻找解决方案或考虑使用特定于提供程序的解决方案:我不知道Hibernate的任何内容,但请参阅以下EclipseLink功能:

https://wiki.eclipse.org/EclipseLink/Examples/JPA/Composite

  

从EclipseLink 2.3.0开始,JPA开发人员现在可以组合使用   持久性单元在运行时一起允许实体存储   在不同的数据库。 这包括对关系的支持   在不同持久性单元中的实体之间(引用跨越   数据库)