由于我的控制,我有两个现有的数据库几乎是克隆。EclipseLink/JPA和具有相似结构的多个数据库
“几乎”,因为在#2中不存在表格/列,反之亦然。
这里最好的办法是什么?
“强力”路线似乎是“为一个创建所有实体,复制到新软件包并为第二个数据库添加/删除”。这不是我真正想去的路线。
哦,JPA是绝对不允许改变其中任何一个数据库架构。
除了EclipseLink,我使用Spring 3.1和SpringData。
由于我的控制,我有两个现有的数据库几乎是克隆。EclipseLink/JPA和具有相似结构的多个数据库
“几乎”,因为在#2中不存在表格/列,反之亦然。
这里最好的办法是什么?
“强力”路线似乎是“为一个创建所有实体,复制到新软件包并为第二个数据库添加/删除”。这不是我真正想去的路线。
哦,JPA是绝对不允许改变其中任何一个数据库架构。
除了EclipseLink,我使用Spring 3.1和SpringData。
如果你的数据库不同,你需要创建不同的类/映射。例如,如果你在有DB1 3列(id
,baz
,pleh
)和DB2其他3列两个数据库有一个表Foo
(id
,baz
,qux
),你可以这样做:
@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;
}
这样做会导致异常的JPA会产生插入语句,如:
insert into Foo (id, baz, pleh, qux) values (?, ?, ?, ?)
对于DB1,你需要创建一个类Foo
这样的:
@Entity
public class Foo
{
@Column(name = "id")
private Long id;
@Column(name = "baz")
private String baz;
@Column(name = "pleh")
private String pleh;
}
而对于DB2这样的:
@Entity
public class Foo
{
@Column(name = "id")
private Long id;
@Column(name = "baz")
private String baz;
@Column(name = "qux")
private String qux;
}
你可能要考虑的EclipseLink的可扩展性支持。
您可以向该类添加属性映射,并使用orm.xml将其他数据库中的其他属性映射到该映射中。
请参阅: http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Advanced_JPA_Development/Extensible_Entities