0

我是 Java Enterprise 和 JPA 的新手(使用 Netbeans 的 EclipseLink JPA 2.0)。我试图实现不同项目和包中不同@Entity 类之间的链接,但没有成功。

数据库 D1 有一个表 T1 和一个同义词 T2 引用数据库 D2 上的表 T2。

所以我创建了 2 个项目(罐子):

D1-jpa 包含 @Entity package1.T1.class 和 persistence.xml(也映射 T2)

D2-jpa 包含 @Entity package1.T2.class 和 persistence.xml

我需要创建一个从 T1 到 T2 的 @OneToOne 关系,以便 T1 具有

@OneToOne

公共 T2 t2;

问题是当我尝试执行简单的 JPQL 查询时:

从 T1 中选择 t

翻译后的查询类似于

从 T1 t 中选择 t.field1、t.field2、T2_t2;——“T2_t2”??

当我期望 SELECT t1.field1, t1.field2, t2.field1 FROM T1 t1, T2 t2

WHERE(加入条件)

你对问题的解决方案是什么?如果 D1 上的同义词与 D2 上的真实表具有不同的名称(同义词 TT2 在 D2 上引用 T2 ...)怎么办?

都看。

F。

4

1 回答 1

1

纯 JPA 中的 @OneToOne 仅在目标是此持久性单元中的实体时才有效。由于您没有遇到异常,因此它的工作方式好像两者都可以由 D1 持久性单元类加载器找到并处理。该映射将 T1->T2 外键字段默认为“T2_t2”,这可能是因为您的 T2 实体将 t2 字段或属性标记为其 ID。如果要将不同的数据库列用作外键,则需要在关系上指定连接列。

我不清楚你的目的,因为 T1 必须能够导入 T2,所以它们不是完全分开的——这些表也应该在同一个数据库中,以便它们之间存在 1:1。但是您可以完成将多个持久性单元组合在一起并将它们作为一个与 EclipseLink 中描述的复合持久性单元功能一起使用http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Advanced_JPA_Development/Composite_Persistence_Units

于 2013-04-19T17:02:32.567 回答