Spaß mit Sqeuenzen in JEE / JPA


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.

Du hast Fragen oder Anmerkungen? Kontakt: arndt@schoenb.de