====== 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