For security reasons, our oracle db objects usually belong to a different scheme than the registered user. For instance. the tables are in xx_core, and the user we are registering with is xx_app_yy. In my persistence.xml, I define an orm file to specify a schema name during deployment, for example: <mapping-file>xx_schema_orm.xml</mapping-file>
Then in xx_schema_orm.xml I can define the owner-schema object, for example:
<persistence-unit-metadata>
<persistence-unit-defaults>
<schema>xx_core</schema>
</persistence-unit-defaults>
</persistence-unit-metadata>
This works fine for tables, but I cannot find the equivalent for sequences. It tries to use a sequence without a schema name, and then gets an exception:
2010-10-14 03: 04: 05,423: DEBUG could not get next sequence value [select xx_SEQ.nextval from dual] - org.hibernate.util.JDBCExceptionReporter
java.sql.SQLException: ORA-02289: sequence does not exist
at oracle.jdbc.driver.DatabaseError.throwSqlException (DatabaseError.java:145)
I tried to set the schema name as part of the sequence name for the generator in xx_schema_orm.xml, but could not get it to work, for example:
<sequence-generator name="xx_SEQ_GEN"
sequence-name="xx_core.xx_SEQ"/>
Workarounds I can try:
- Create a SYNONYM database for sequences in the user schema.
- Stop using sequences and use another way of generating identifiers.
source
share