2009-12-03 4 views
7

Also, ich stand gerade eine Spring Hibernate App und ich kann nicht scheinen, meine Mapping-Datei richtig zu bekommen. Ich benutze MySql 5 und eine automatische Inkrementierungstaste. Hier ist der ID-Teil meiner Mapping-Datei. Hibernate Probleme mit Auto Increment ID MYSQL 5

<hibernate-mapping> 
    <class name="org.XXXXXXX.Contact" table="contact"> 
     <id name="id" column="id" type="int" unsaved-value="null"> 
      <generator class="native" /> 
     </id> 

Hier ist die SQL

erzeugt

Einsatz in Kontakt (Titel, first_name, middle_name, last_name, Suffix, job_title, dob, passport_number, passport_expiration, Arbeitgeber, dietary_restrictions, secondary_contact_fname, secondary_contact_lname, secondary_contact_mname, secondary_contact_title, secondary_contact_suffix, secondary_contact_job_title, emergency_contact_name, emergency_contact_phone, emergency_contact_notes, is_company) Werte (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, ?,?,?,?)

Hier

ist der wichtige Teil des Stack-Trace:

org.hibernate.AssertionFailure: null id in org.XXXXXXX.Contact Eintrag (nicht die Session spülen, nachdem eine Ausnahme auftritt)

Ich habe habe versucht, den ungesicherten Wert auf "0" und "-1" zu setzen und sie über die Leitung zu senden. Irgendwelche Ideen, was ich falsch mache?

Antwort

10

Sie müssen sich daran erinnern, dass Hibernate eine Persistenzschicht ist und in der Lage sein muss, zu verfolgen, wo sich ein Objekt in der Datenbank befindet. Also, wenn es eine Einfügung macht, muss es tatsächlich den Autoinkrementierungszähler abfragen, um zu sehen, wie die nächste ID sein sollte. Es fügt dann die ID in das Objekt ein und fügt das Objekt in die Datenbank ein. Damit Hibernate in Einfügevorgänge ausgeführt werden kann, muss zuerst eine Auswahl getroffen werden (es sei denn, Sie verwenden eine Art GUID, die von der Anwendung generiert wird). Wenn Sie mySQL Auto-Inkrement verwenden, verwenden Sie den Generator "identity".

Erläuterung der verschiedenen Generatoren:

http://www.roseindia.net/hibernate/hibernateidgeneratorelement.shtml

A Hibernate XML-Code-Schnipsel:

<id name="id" type="long" unsaved-value="null" > 
    <column name="uid" not-null="true"/> 
    <generator class="identity"/> 
</id> 
+0

Die Änderung der Generatorklasse hat funktioniert. Über den angegebenen Link konnte ich mein Problem beheben. Am Ende verklagte ich eher die Inkremente als die Identität. Vielen Dank! –

0

"Increment" Generator ist nicht freundlich Cluster. Wenn ein anderer Prozess in dieselbe Tabelle eingefügt wird. Die nächste Einfügung aus dem Ruhezustand schlägt fehl

Verwandte Themen