使用多个数据库模式的 JPA

2022-09-01 14:46:36

我在使用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}")
...

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

干杯


答案 1

我有同样的问题,我用持久性解决了这个问题.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>

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

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

答案 2

如果您在部署时知道,您可以做的一件事是拥有2个orm.xml文件。一个用于架构 1,一个用于架构 2,然后在持久性中.xml定义了 2 个持久性单元。如果需要更改架构之类的内容,则放置注释是一种反模式


推荐