Skip navigation.
Home

Hibernate sequence in different schema than class

Here's how to have hibernate use a sequence in a different schema than the one used for the class.

In most places, hibernate needs a separate schema attribute to change the default schema. In the case of sequences, hibernate can use a fully qualified or unqualified name (i.e. schema.seq vs seq). I'm not really sure what it does if you have a . in the sequence name.. maybe that's not allowed.

XDoclet


/**
  * @hibernate.id column="id" unsaved-value="null"
  * @hibernate.generator class="sequence" 
  * @hibernate.param name="sequence"
       value="SCHEMA2.HIBERNATE_SEQUENCE"
  */

User.hbm.xml


<class 
  name="com.company.adf.ddf.model.User" 
  table="app_user" schema="SCHEMA1" >

  <id name="id" column="id" unsaved-value="null" >
    <generator class="sequence" > 
      <param name="sequence"> 
        <![CDATA[SCHEMA2.HIBERNATE_SEQUENCE]]>
      </param>
    </generator>
  </id>
  ...
</class>
Matt Fleming's picture

For "increment" generator

Here's how to do it for the increment generator type. It uses the more pervasive method of specifying a schema...

XDoclet


/**
 * @hibernate.id column="id" unsaved-value="null"
 * @hibernate.generator class="increment" 
 * @hibernate.param name="schema" value="SCHEMA2"
 */
public Long getId() {
  return id;
}

Hibernate.hbm.xml


<generator class="increment">
  <param name="schema">
    <![CDATA[SCHEMA2]]>
  </param>
</generator>