【问题标题】:EclipseLink/JPA and multiple databases with similar structuresEclipseLink/JPA 和多个具有相似结构的数据库
【发布时间】:2012-06-14 03:18:59
【问题描述】:

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

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

这里最好的方法是什么?

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


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

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

【问题讨论】:

    标签: spring jpa eclipselink ddl


    【解决方案1】:

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

    您可以在类中添加一个properties Map,并使用一个orm.xml将其他数据库中的附加属性映射到这个map中。

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

    【讨论】:

      【解决方案2】:

      如果您的数据库不同,您需要制作不同的类/映射。例如,如果您在两个数据库中都有一个表 Foo,它在 db1 中有 3 列(idbazpleh),在 db2 中有 3 列(idbaz、@987654327 @) 你不能这样做:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-15
        • 1970-01-01
        • 1970-01-01
        • 2021-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多