java - 来自多个 persistenceUnit 的实体上的 JPA 级联

标签 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;
}*

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

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

最佳答案

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

Starting with EclipseLink 2.3.0 JPA developers can now combine persistence units together at runtime allowing entities to be stored in different databases. This includes support for relationships between entities in different persistence units (references across databases)

关于java - 来自多个 persistenceUnit 的实体上的 JPA 级联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28412703/

相关文章:

java - @ManyToMany 与 EclipseLink 2.5.2 和 Jackson 2.4.4

java - Spring mvc @RequestBody如何用@EmbeddedId解析JPA实体

java - 通过网络传输 java.lang.reflect.Proxy

java - Spring Boot 中多个项目中的错误处理程序

java - 如果表内容更改,是否更新 RowSet?

java - 将货币值存储为 Doubles 但使用 BigDecimal 计算值

eclipse - 如何防止 hibernate 日志到我的控制台(eclipse 和 tomcat 通用日志)?

hibernate - 当子实体具有复合PK时,如何在父实体中定义@OneToMany?

JAVA GWT 对话框如何添加新行字符

java - 填充实体后为空下拉列表