hibernate - query - Problemi di ibernazione con l'ID di incremento automatico MYSQL 5



(2)

Devi ricordare che Hibernate è un livello di persistenza e deve essere in grado di tenere traccia di dove si trova un oggetto nel database. Quindi, quando fa un inserto, in realtà dovrà interrogare il contatore di auto-incremento per vedere quale dovrebbe essere il prossimo ID. Quindi inserisce l'ID nell'oggetto e inserisce l'oggetto nel database. Quindi, per l'ibernazione da fare in insert, usa prima la necessità di eseguire una selezione (a meno che non si stia utilizzando un GUID generato dall'applicazione). Quando si utilizza l'incremento automatico mySQL, utilizzare il generatore "identità".

Spiegazione dei vari generatori:

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

Un snippet di codice XML in ibernazione:

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

Quindi, ho appena alzato un'app di Spring Hibernate e non riesco a ottenere il mio file di mappatura correttamente. Sto usando MySql 5 e una chiave di incremento automatico. Ecco la parte ID del mio file di mappatura.

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

Ecco l'SQL generato

inserire in contatto (titolo, first_name, middle_name, last_name, suffisso, job_title, dob, passport_number, passport_expiration, employer, 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) valori (?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)

Ecco la parte importante della traccia dello stack:

org.hibernate.AssertionFailure: id null nella voce org.XXXXXXX.Contact (non svuotare la sessione dopo che si è verificata un'eccezione)

Ho provato a impostare il valore non salvato su "0" e "-1" e inviarli via cavo. Qualche idea su cosa sto facendo male?


Answer #1

Il generatore "Increment" non è adatto al cluster. Se qualche altro processo si inserisce nella stessa tabella. L'inserimento successivo da ibernazione avrà esito negativo





mysql