JPA使用多个数据库模式

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

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

我们有TABLE1属于模式AD,TABLE2属于BD。

@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}") ... 

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

干杯

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

   . . . ormOne.xml . . .   . . . ormTwo.xml . . .   

现在,您可以为特殊模式创建EntityManagerFactory

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

如果您在部署时知道要做的事情就是拥有2个orm.xml文件。 一个用于schema1,另一个用于schema2,然后在persistence.xml中定义了2个持久性单元。 如果需要更改模式之类的东西,那么放置注释是一种反模式

试试以下:

 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) ... 

您可以在context.xml中有两个DataSource声明(每个模式一个),并使用此数据源定义两个持久性单元。 然后,context.xml可以在不同环境的应用服务器上有所不同。

在创建数据源时,您可以初始化连接以使用不同的模式

例如,对于weblogic

在weblogic / oracle中指定JDBC池的默认架构

注释参数必须是final,因此不能在运行时更改。