@Entity不同数据库上的表之间的关系

时间:2013-04-19 16:12:51

标签: jpa netbeans entity eclipselink one-to-one

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

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

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

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

包含@Entity package1.T2.class和persistence.xml

的D2-jpa

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

@OneToOne

公共T2 t2;

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

SELECT t FROM T1 t

翻译的查询类似于

SELECT t.field1,t.field2,T2_t2 FROM T1 t; - “T2_t2”??

当我期待某事时 SELECT t1.field1,t1.field2,t2.field1 FROM T1 t1,T2 t2

WHERE(加入条件)

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

关注所有。

F。

1 个答案:

答案 0 :(得分:1)

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

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