由于我无法控制,我有两个现有的数据库,几乎是克隆。
“几乎”,如#1中的表/列,#2中不存在,反之亦然。
这里最好的方法是什么?
“强力”路线似乎是“为一个创建所有实体,复制到新包并为第二个数据库添加/删除”。这不是我想去的路线。
哦,绝对不允许JPA改变任何一个数据库中的模式。
除了EclipseLink,我使用的是Spring 3.1和SpringData。
答案 0 :(得分:1)
您可能希望了解EclipseLink的可扩展性支持。
您可以向该类添加属性Map,并使用orm.xml将其他数据库中的其他属性映射到此映射中。
请参阅, http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Advanced_JPA_Development/Extensible_Entities
答案 1 :(得分:0)
如果您的数据库不同,则需要进行不同的类/映射。例如,如果两个数据库中都有一个表Foo
,其中db1(id
,baz
,pleh
)中有3列,而db2中有3列({{ 1}},id
,baz
)你不能这样做:
qux
这样做会导致异常,因为JPA会生成插入语句,如:
@Entity
public class Foo
{
@Column(name = "id")
private Long id;
@Column(name = "baz")
private String baz;
@Column(name = "pleh")
private String pleh;
@Column(name = "qux")
private String qux;
}
对于DB1,您需要创建一个类insert into Foo (id, baz, pleh, qux) values (?, ?, ?, ?)
,如下所示:
Foo
对于像这样的DB2:
@Entity
public class Foo
{
@Column(name = "id")
private Long id;
@Column(name = "baz")
private String baz;
@Column(name = "pleh")
private String pleh;
}