JPA使用多个数据库模式

jav*_*der 25 java database schema spring jpa

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

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

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

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

@Entity
@Table(name = "TABLE2", schema="S2D")
...
Run Code Online (Sandbox Code Playgroud)

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

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

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

@Entity
@Table(name = "TABLE2", schema="${schema2}")
...
Run Code Online (Sandbox Code Playgroud)

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

干杯

car*_*ich 10

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

<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>
Run Code Online (Sandbox Code Playgroud)

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

EntityManagerFactory emf = Persistence.createEntityManagerFactory("schemaOne");
Run Code Online (Sandbox Code Playgroud)