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:
In JPA 2.0:
@SequenceGenerator
annotation and the equivalent sequence-generator
element do allow to specify a schema
(and catalog
) name. schema
subelement should be honored by sequence generators as well.But this doesn't apply to JPA 1.0.
I'll just quote the sections about the schema
subelement to illustrate the differences (other relevant sections are mentioned in the references below). From the JPA 2.0 specification:
12.2.1.1 schema
The
schema
subelement applies to all entities, tables, secondary tables, join tables, collection tables, table generators, and sequence generators in the persistence unit.The
schema
subelement is overridden by anyschema
subelement of theentity-mappings
element; anyschema
element explicitly specified in theTable
orSecondaryTable
annotation on an entity or anyschema
attribute on anytable
orsecondary-table
subelement defined within anentity
element; anyschema
element explicitly specified in aTableGenerator
annotation ortable-generator
subelement; any schema element explicitly specified in aSequenceGenerator
annotation orsequence-generator
subelement; anyschema
element explicitly specified in aJoinTable
annotation orjoin-table
subelement; and any schema element explicitly specified in aCollectionTable
annotation orcollection-table
subelement.
From the JPA 1.0 specification:
10.1.1.1 schema
The
schema
subelement applies to all entities, table generators, and join tables in the persistence unit.The
schema
subelement is overridden by anyschema
subelement of theentity-mappings
element; anyschema
element explicitly specified in theTable
orSecondaryTable
annotation on an entity or any schema attribute on anytable
orsecondary-table
subelement defined within anentity
element; anyschema
element explicitly specified in aTableGenerator
annotation ortable-generator
subelement; and anyschema
element explicitly specified in aJoinTable
annotation orjoin-table
subelement.
So, unless your provider offers some specific extensions, my suggestions are:
schema
subelement will do the trick ~or~TableGenerator
if you have to stick with JPA 1.0 ~or~If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With