Umgebung
- JBoss 7.x
- Hibernate
- Oracle
In einer Entität war ein Sequence Generator wie folgt definiert
@SequenceGenerator(name = "SEQ_OBJECTID", allocationSize = 100) @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_MY_OBJECT")
@Id
private Long id;
In der Datenbank wurde die Sequenz wie folgt angelegt worden
CREATE SEQUENCE SEQ_OBJECTID START WITH 1000000000 MAXVALUE 1000000000000000000 INCREMENT BY 1 MINVALUE 1000000000 NOCACHE;
Da die Sequenz in der Datenbank ein Inkrement von 1 hat, in JPA aber hunderter Blöcke erwartet werden, beginnt die Nummerierung der Id ggf. unerwartet bei -99. Dieses eher optische Problem ist nicht das einzige. Bei der nächsten nextval Anfrage liefert die DB 2. JPA beginnt den Block somit bei 98 und es kommt zu dem Versuch einen schon existierenden Schlüssel in die Datenbanktabelle einzutragen. Dies führt zu einer Exception.
Es ist also wichtig, die Werte der Sequenzen in JPA und der DB synchron zu halten.