JPA:在单个持久性单元上映射多个 Oracle 用户

JPA: Map multiple Oracle users on single persistence unit

我正在使用 EclipseLink 2.5.2 (JPA 2.1),Spring 4.1.5,我正在 Weblogic 12 和 Oracle 12c 上部署。

我需要部署我的应用程序以使用 2 个模式(同一数据库上的 2 个用户)。第一个包含应用程序数据,第二个包含永远不会更改的查找日期。这是我的客户设置的硬性要求(其他应用程序可能会使用查找模式),但我知道它们将在同一个 Oracle 实例上。我的 JPA 数据模型包含来自模式和它们之间引用的实体。同样,在数据库级别,数据模式中存在查找模式的 FK。

我愿意:

我目前的解决方案:

我有一个持久性单元,其中包含来自两个模式的所有实体。我为查找实体添加了一个 orm.xml,我在构建时通过 Maven 定义了它们的模式:

 <entity class="my.package.lookup.ActionTaken">
    <table name="ACTION_TAKEN" schema="${db.lookup.username}"/>
 </entity>

我这样做是为了避免在查找实体的@Table 注释中对查找模式进行硬编码。

效果很好,生成的 SQL 具有查找架构中表的正确前缀。问题是,但是,由于查找架构是在构建时定义的,因此生成的 war 文件不可移植。

有什么想法可以实现吗?

更多想法:

Joins across tables in different data sources are not supported.

如果您可以使用相同的数据源来访问不同的模式,那么您可以使用 EclipseLink 的定制器更改模式名称,如下所述:http://eclipse.org/eclipselink/documentation/2.5/jpa/extensions/a_customizer.htm。 您将需要更改实体描述符以及任何使用联接 table 的 1:M 和 M:M 映射中的 table/schema 名称。