Inhaltsverzeichnis

Ein Oracle Sequence für den Primary Key einer Tabelle in Hibernate definieren und verwenden

Ziel:

Für den Primary Key einer Tabelle soll das Sequence Objekt in der Oracle Datenbank verwendet werden.

Getestet in Hibernate 4.2.0

Vorbereitung - Hibernate konfigurieren

Setzen der Hibernate Property „hibernate.jdbc.use_get_generated_keys“

  <property name="hibernate.jdbc.use_get_generated_keys">true</property>

Hibernate GenericGenerator Annotations

Mit @GenericGenerator können diverse Strategien für das Erzeugen einer Schlüssels umgesetzt werden.

siehe auch:

import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Parameter;
import javax.persistence.GeneratedValue;
 
@Entity
@Table(name = "EMP")
public class User {
 
    @GenericGenerator(name = "OraSeqGenerator", strategy = "sequence-identity", parameters = @Parameter(name = "sequence", value = "EMP_ID_SEQ"))
 
    @Id
    @GeneratedValue(generator = "OraSeqGenerator")
    private int empno;
 
 
// get and set 
 
...
 
}
 

Fehler

Erhält man diesen Fehler, wurde zuvor die Hibernate Propertiy nicht gesetzt!

ERROR: HHH000099: an assertion failure occured (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session): org.hibernate.AssertionFailure: getGeneratedKeys() support is not enabled
Exception in thread "main" org.hibernate.AssertionFailure: getGeneratedKeys() support is not enabled

siehe auf http://www.javadocexamples.com/org/hibernate/org.hibernate.AssertionFailure.html den Abschnitt:

if ( useGetGeneratedKeys && !factory.getSettings().isGetGeneratedKeysEnabled() ) {
            throw new AssertionFailure("getGeneratedKeys() support is not enabled");
}

Quellen

Allgemein: