我有两个不同的数据库D1,D2和一个表T。
T有一个主键列id,它是在D1中自动生成的,在D2中是一个简单的整数。我必须将记录从D1中的T转换为D2中的T,因此我用JPA将T映射为@实体。问题是,@ID是@GeneratedValue(GenerationType.IDENTITY= D1 ),而不是D2。
是否有避免复制实体的解决方案?我注意到,使用@MappedSuperclass时,我需要一个@Id列,但在我的例子中,这正是我想要专门研究的。我找到的唯一解决方案是生成两个不同的类,引用除@id以外相同的表.还有更好的吗?
(如果我使用一个常见的抽象类,在定义@NamedQueries时会遇到问题,因为似乎无法引用继承的字段(从专用m选择m,其中m.aBaseField= :aBaseField)返回一个异常:“状态字段路径'm.aBaseField‘不能解析为有效类型。”
发布于 2013-08-08 19:33:46
我没有找到真正的解决办法。我结束的工作是复制提供不同@实体(name=“name1”)的类,并删除其中一个的@GenerationType注释。在持久化单元中,我根据将要做的事情使用其中一个或另一个。
发布于 2013-08-07 13:35:56
我将定义两个不同的持久性单元,一个用于每个数据库。然后,您可以使用orm.xml文件自定义一个。
https://stackoverflow.com/questions/18084806
复制相似问题