2012-06-14 6 views
0

En raison de décisions hors de mon contrôle, j'ai deux bases de données existantes qui sont presque des clones.EclipseLink/JPA et plusieurs bases de données avec des structures similaires

"Presque" car il y a des tables/colonnes dans # 1 qui n'existe pas dans # 2, et vice versa.

Quelle est la meilleure approche ici? La route "brute force" semble être "créer toutes les entités pour une, copier dans le nouveau paquet et ajouter/supprimer pour la deuxième base de données". Ce qui n'est pas vraiment une voie que j'aimerais emprunter.


Oh, et JPA est certainement pas autorisé à modifier le schéma soit dans la base de données. Outre EclipseLink, j'utilise Spring 3.1 et SpringData en plus de EclipseLink.

Répondre

0

Si vos bases de données diffèrent, vous devez créer des classes/mappages différents. Par exemple, si vous avez une table Foo dans les deux bases de données qui a 3 colonnes DB1 (id, baz, pleh) et 3 autres colonnes db2 (id, baz, qux) vous ne pouvez pas faire ceci:

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

cela entraînera des exceptions JPA va générer des instructions d'insertion comme:

insert into Foo (id, baz, pleh, qux) values (?, ?, ?, ?) 

pour DB1 vous devez créer une classe Foo comme ceci:

@Entity 
public class Foo 
{ 
    @Column(name = "id") 
    private Long id; 
    @Column(name = "baz") 
    private String baz; 
    @Column(name = "pleh") 
    private String pleh; 
} 

Et pour DB2 comme ceci:

@Entity 
public class Foo 
{ 
    @Column(name = "id") 
    private Long id; 
    @Column(name = "baz") 
    private String baz; 
    @Column(name = "qux") 
    private String qux; 
} 
Questions connexes