我是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。
答案 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