For security reasons, our oracle db objects normally belong to a different schema than the logged in user. Eg. tables are in xx_core and the user we log in is xx_app_yy .
In my persistence.xml I define a orm file so that I can specify the schema name at deploy time eg.:
<mapping-file>xx_schema_orm.xml</mapping-file>
Then in the xx_schema_orm.xml I can define the object-owning-schema eg.:
<persistence-unit-metadata>
<persistence-unit-defaults>
<schema>xx_core</schema>
</persistence-unit-defaults>
</persistence-unit-metadata>
This works great for tables, but I can't find the equivalent for sequences. It tries to use the sequence without the schema name and then I get 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've tried to set the schema name as part of the sequence name for a generator in the xx_schema_orm.xml, but could not get it working eg.:
<sequence-generator name="xx_SEQ_GEN"
sequence-name="xx_core.xx_SEQ"/>
Workarounds I may try:
- make a database SYNONYM for the sequences in the user's schema.
- stop using sequences and use some other way to generate ids.