====== 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" true === Hibernate GenericGenerator Annotations === Mit @GenericGenerator können diverse Strategien für das Erzeugen einer Schlüssels umgesetzt werden. siehe auch: * http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/#entity-hibspec-identifier * http://www.galileocomputing.de/artikel/gp/artikelID-328 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: * http://javabrains.koushik.org/2011/07/hibernate-tutorial-07-primary-keys.html