【发布时间】:2011-04-25 16:15:36
【问题描述】:
出于安全原因,我们的 oracle 数据库对象通常属于与登录用户不同的模式。例如。表在 xx_core 中,我们登录的用户是 xx_app_yy 。
在我的 persistence.xml 我定义了一个 orm 文件,以便我可以在部署时指定架构名称,例如:
<mapping-file>xx_schema_orm.xml</mapping-file>
然后在 xx_schema_orm.xml 我可以定义对象拥有模式,例如:
<persistence-unit-metadata>
<persistence-unit-defaults>
<schema>xx_core</schema>
</persistence-unit-defaults>
</persistence-unit-metadata>
这对表格很有效,但我找不到序列的等价物。它尝试使用没有模式名称的序列,然后出现异常:
2010-10-14 03:04:05,423:DEBUG 无法获取下一个序列值 [从双重选择 xx_SEQ.nextval] - org.hibernate.util.JDBCExceptionReporter java.sql.SQLException: ORA-02289: 序列不存在 在 oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:145)我尝试将模式名称设置为 xx_schema_orm.xml 中生成器的序列名称的一部分,但无法使其正常工作,例如:
<sequence-generator name="xx_SEQ_GEN"
sequence-name="xx_core.xx_SEQ"/>
我可以尝试的解决方法:
- 为用户架构中的序列创建一个数据库 SYNONYM。
- 停止使用序列并使用其他方式生成 ID。
【问题讨论】:
标签: java oracle jpa persistence