0

私の制御不能な決定により、ほとんどクローンである 2 つの既存のデータベースがあります。

「ほぼ」は、#2 には存在しないテーブル/列が #1 にあり、その逆も同様です。

ここで最善のアプローチは何ですか?

「ブルートフォース」ルートは、「すべてのエンティティを1つ作成し、新しいパッケージにコピーして、2つ目のデータベースに追加/削除する」ようです。これは私が実際に行きたいルートではありません。


ああ、JPAはどちらのデータベースでもスキーマを変更することは絶対に許可されていません。

EclipseLink の他に、Spring 3.1 と SpringData を使用しています。

4

2 に答える 2

1

EclipseLinkの拡張性サポートを調べることをお勧めします。

プロパティMapをクラスに追加し、orm.xmlを使用して、他のデータベースの追加の属性をこのマップにマップできます。

http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Advanced_JPA_Development/Extensible_Entitiesを参照して ください。

于 2012-06-14T14:42:54.173 に答える
0

データベースが異なる場合は、異なるクラス/マッピングを作成する必要があります。たとえばFoo、db1 に 3 つの列 ( idbazpleh) と db2 に他の 3 つの列( idbaz、 ) を持つ両方のデータベースにテーブルがある場合、これは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 (?, ?, ?, ?)

FooDB1 の場合、次のようなクラスを作成する必要があります。

@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 に答える