EclipseLink / JPA和具有类似结构的多个数据库

时间:2012-06-14 03:19:00

标签: spring jpa eclipselink ddl

由于我无法控制,我有两个现有的数据库,几乎是克隆。

“几乎”,如#1中的表/列,#2中不存在,反之亦然。

这里最好的方法是什么?

“强力”路线似乎是“为一个创建所有实体,复制到新包并为第二个数据库添加/删除”。这不是我想去的路线。


哦,绝对不允许JPA改变任何一个数据库中的模式。

除了EclipseLink,我使用的是Spring 3.1和SpringData。

2 个答案:

答案 0 :(得分:1)

您可能希望了解EclipseLink的可扩展性支持。

您可以向该类添加属性Map,并使用orm.xml将其他数据库中的其他属性映射到此映射中。

请参阅, http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Advanced_JPA_Development/Extensible_Entities

答案 1 :(得分:0)

如果您的数据库不同,则需要进行不同的类/映射。例如,如果两个数据库中都有一个表Foo,其中db1(idbazpleh)中有3列,而db2中有3列({{ 1}},idbaz)你不能这样做:

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;
}