Hibernate Oracle Sequence auf nicht-Primärschlüssel-Feld

LukeHawk

Grünschnabel
Hallo,

habe folgendes Problem:

ich bekomme es nicht hin eine Oracle-Sequenz auf ein nicht-primärschlüssel-Feld zu mappen.
Meinen Primärschlüssel (OID) inkrementiert Hibernate für mich ohne Probleme:
Code:
 @Id
 @SequenceGenerator(name="JOB_OID_GENERATOR", sequenceName="SEQ_JOB_OID")
 @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="JOB_OID_GENERATOR")
 private long oid;

Jedoch habe ich ein weiteres Feld, das über eine Oracle-Sequenz inkrementiert werden soll.
Mein Ansatz:
Code:
 @SequenceGenerator(name="JOB_IS_NO_GENERATOR", sequenceName="SEQ_IS_NO")
 @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="JOB_IS_NO_GENERATOR")
 @Column(name="IS_NO")
 private BigDecimal isNo;

Ich hatte erwartet daß es so klappen könnte, finde jedoch nirgends Doku dazu (ausser für Primärschlüssel).
Ergebnis: constraint violation weil er NULL einfügt.
Es gibt keine Anhaltspunkte dafür, dass irgendein SequenceGenerator überhaupt den Versuch startet die Sequent für IS_NO zu holen.
Für den primary key OID gibt's Nachrichten wie:
Code:
 11:45:43,029 DEBUG [AnnotationBinder] Add sequence generator with name: JOB_OID_GENERATOR
 ...
 11:45:43,982 DEBUG [SequenceGenerator] Sequence identifier generated: 13538
Mein Versuch bringt also schlichtweg nichts hervor.

Kann mir jemand sagen wie ich eine Sequenz für einen nicht-Primärschlüssel aus einer Oracle Sequenz generieren lassen kann?
Ist @javax.persistence.SequenceGenerator nür für primary keys gedacht? Wenn ja, kennt jemand die dafür geeignete Klasse / Workarounds?

Umgebung:
Hibernate Commons Annotations 3.1.0.GA
Hibernate Annotations 3.4.0.GA
Hibernate 3.3.0.SP1
JDK 1.4
Oracle9i

Vielen Dank für Eure Hilfe!!

Gruß,
Luke
 
Hallo,

deklariere doch mal den Sequence Generator für deine Job-Nummern an der Klasse und gib dann als formula bei der jobNo JPA Spaltendefinition als formula (select seq_name.nextval from dual).
Außerdem wenn du Java 5 Annotations (ohne Retroweaver) benutzt kann deine Ausführungsumgebung nicht JDK 1.4 sein.

Gruß Tom
 

Neue Beiträge

Zurück