JPA使用继承区分id GenerationType

时间:2013-08-06 15:49:50

标签: inheritance jpa mappedsuperclass

我有两个不同的数据库D1,D2,它们具有相同的表T.

T有一个主键列id,它在D1中自动生成,是D2中的一个简单整数。 我要将记录从D1中的T转移到D2中的T,所以我将T映射为@Entity和JPA。 问题是@ID是D1的@GeneratedValue(strategy = GenerationType.IDENTITY)但不是D2。

是否有不重复实体的解决方案?我注意到使用@MappedSuperclass我需要一个@Id列但在我的情况下我正在尝试专门化。 我找到的唯一解决方案是生成引用同一个表的两个不同的类,这些类与@id相同...更好吗?

(如果我使用一个常见的抽象类,我在定义@NamedQueries时遇到问题'因为似乎无法引用继承的字段(SELECT m FROM Specialized m WHERE m.aBaseField =:aBaseField)返回异常:“状态字段路径'm.aBaseField'无法解析为有效类型。“

2 个答案:

答案 0 :(得分:1)

我将定义两个不同的持久性单元,每个数据库一个。然后,您可以使用orm.xml文件自定义一个。

答案 1 :(得分:0)

我没有找到真正的解决方案。 我最后做的是复制提供不同@Entity(name =“name1”)的类,并为其中一个删除@GenerationType注释。在持久性单元中,我根据我将要做的事情使用其中一个。