-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 
Author Message
 Post subject: Hibernate liefert andere Werte bei select auf sequence?
PostPosted: Tue Jul 08, 2008 11:08 am 
Newbie

Joined: Tue Jul 08, 2008 10:56 am
Posts: 8
Hallo,

in meiner Anwendung (mit Hibernate 3.2.6.ga) werden die PKs für neues Objekt über eine Sequence auf Oracle (10g) erzeugt, z.B. so:

Code:
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "patient")
    @SequenceGenerator(name = "patient", sequenceName = "patient_sequence")
    private Long id;

Wenn ich nun ein neues Objekt erzeuge, schreibt Hibernate im Log-file, dass es folgende query ausführt:

Code:
     select user_app.patient_sequence.nextval from dual

Anschließend wird ein neuer Eintrag mit der id 150 angelegt.

Wenn ich jedoch das gleiche select-Statement direkt auf der DB ausführe, komme ich Werte ab 1. Wie kann es sein, dass die selbe Sequence im einen Fall ab 150 zählt und im anderen ab 1?


Top
 Profile  
 
 Post subject:
PostPosted: Wed Jul 09, 2008 6:20 pm 
Senior
Senior

Joined: Mon Jul 07, 2008 4:35 pm
Posts: 141
Location: Berlin
Hi tchick,

Quote:
1. Wie kann es sein, dass die selbe Sequence im einen Fall ab 150 zählt und im anderen ab 1?

Ich kenn mich zwar mit Oracle im Speziellen nicht aus, aber aus Erfahrungen mit Postgres könnte es dafür durchaus Erklärungen - vllt. hilft ja eine davon:
  • Hast du beim Testen über HSQL zwischenzeitlich schonmal 149 Datensätze in dieser Tabelle gehabt? Gerechnet über mehrmaliges Erstellen, Befüllen, Löschen, Droppen der Tabelle usw... (Wenn das zwischenzeitliche Droppen und Wiedererstellen der Tabelle mit gleichem Bezeichner ohne CASCADE erfolgt, bleibt die SEQUENCE u.U. bestehen. Beim nächsten Erstellen der Tabelle besteht dann noch die alte Sequenz mit ihrem alten aktuellen Wert)
  • Greifen die Anfragen wirklich auf dieselbe SEQUENCE zu?
  • Hilft das Flushen des Caches? (Vllt. hängen da noch alte Queries rum)
  • Check mal mit SEQUENCE-Funktionen, wie es so steht. Gibt bestimmt sowas wie
    Code:
    SEQUENCE.currval
    oder so ähnlich für den aktuellen Wert.
  • Kannst initial die Sequence auf einen gewünschten Wert setzen vermutlich mit
    Code:
    SEQUENCE.setval
    oder so.


CU
Froestel

_________________
Have you tried turning it off and on again? [Roy]


Top
 Profile  
 
 Post subject:
PostPosted: Thu Jul 10, 2008 6:01 am 
Newbie

Joined: Tue Jul 08, 2008 10:56 am
Posts: 8
Danke für die Tipps.

Hochsetzen des Hibernate Loggings, hat folgendes ergeben: Wir verwenden einen SequenceHiLoGenerator, der zwar einen Wert bei der Sequence abfragt, aber dann irgendwas dazu addiert. Der Sinn ist mir noch etwas verborgen, aber d.h., dass bei mehreren Applikationen, die gleichzeitig auf die DB zugreifen, ich nicht sicherstellen kann, welche ids noch frei sind, oder?


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.