使用多个数据库模式的 JPA

新手上路,请多包涵

我在使用 JPA/Spring 的一个特定问题上遇到了一些麻烦:

如何动态地将模式分配给实体?

我们有属于架构 AD 的 TABLE1 和属于 BD 的 TABLE2。

 @Entity
@Table(name = "TABLE1", schema="S1D")
...

@Entity
@Table(name = "TABLE2", schema="S2D")
...

模式可能不会在注释属性中进行硬编码,因为它取决于环境 (Dev/Acc/Prd)。 (接受模式是 S1A 和 S2A)

我怎样才能做到这一点?是否可以像这样指定某种占位符:

 @Entity
@Table(name = "TABLE1", schema="${schema1}")
...

@Entity
@Table(name = "TABLE2", schema="${schema2}")
...

以便根据驻留在环境中的属性文件替换模式?

干杯

原文由 javacoder 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 705
2 个回答

我遇到了同样的问题,我用 persistence.xml 解决了这个问题,我在其中引用了我声明的 db shema 中所需的 orm.xml 文件

<persistence
xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0" >
<persistence-unit name="schemaOne">
    . . .
    <mapping-file>ormOne.xml</mapping-file>
    . . .
</persistence-unit>

<persistence-unit name="schemaTwo">
    . . .
    <mapping-file>ormTwo.xml</mapping-file>
    . . .
 </persistence-unit>
</persistence>

现在您可以为您的特殊模式创建一个 EntityManagerFactory

 EntityManagerFactory emf = Persistence.createEntityManagerFactory("schemaOne");

原文由 Carmen 发布,翻译遵循 CC BY-SA 4.0 许可协议

尝试以下:

 puplic class MyClass {
  public static final String S1D="S1D";
  public static final String S2D="S2D";
}

@Entity
@Table(name = "TABLE1", schema=MyClass.S1D)
...

@Entity
@Table(name = "TABLE2", schema=MyClass.S2D)
...

原文由 user3092746 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题