0

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

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

这里最好的方法是什么?

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


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

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

4

2 回答 2

1

您可能想查看 EclipseLink 的可扩展性支持。

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

见, http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Advanced_JPA_Development/Extensible_Entities

于 2012-06-14T14:42:54.173 回答
0

如果您的数据库不同,您需要制作不同的类/映射。例如,如果您Foo在两个数据库中都有一个表,该表在 db1 ( id, baz, pleh) 中有 3 列,在 db2 ( id, baz, qux) 中有 3 个其他列,则不能这样做:

@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;
}
于 2012-06-14T05:24:14.647 回答