- 我们在企业应用程序中使用(纯)JPA进行持久化。
- 由于性能原因,我们在这里和那里使用了许多相当复杂的本地查询。
- 访问数据库(Oracle 11g)时,我们使用一个数据库用户
APP_ACCESS
,该用户与表的“所有者”(APP_OWNER
)不同。这是数据库管理的硬性要求。 - 目前,模式名称(
APP_OWNER
)在本地查询中是硬编码的,如下所示:
"SELECT * FROM " + DatabaseSchemaConstants.SCHEMA_NAME + ".LOCATION"
不用说,我们对这种硬编码并不特别满意,因为“所有者”用户名的更改意味着需要更改代码——这对于维护肯定不好。
所以这是我的问题:
如何在纯JPA中配置本地查询的默认数据库模式?
这是我迄今为止找到的:
特别是这个答案,它提出了一个持久单元和一个orm.xml
文件的组合:
<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
version="1.0">
<persistence-unit-metadata>
<persistence-unit-defaults>
<schema>myschema</schema>
</persistence-unit-defaults>
</persistence-unit-metadata>
</entity-mappings>
但我认为这并不适用于本地查询(我们目前正在测试它)。另一个问题是orm.xml
并不是真正的配置文件。(但它仍然比在Java代码中硬编码要好)。
另一篇类似答案的帖子:
进一步的问题:
请参见此答案,该答案建议使用{h-schema}
。看起来很合适,但它是特定于Hibernate的。我们想保持“纯JPA”。另一个问题是我在Hibernate文档中找不到任何关于{h-schema}的提及,因此我们不能依赖此功能。
是否存在标准的JPA方法来设置默认数据库架构 - JPA实体和查询以及本地查询?
或者,如果我们能够在本地查询中使用某些“参数”或“设置”,那么这个问题也可以解决。