2009-12-03 19 views
7

Por lo tanto, acabo de levantar una aplicación Spring Hibernate y parece que no puedo obtener mi archivo de mapeo correcto. Estoy usando MySql 5 y una clave de aumento automático. Aquí está la parte de ID de mi archivo de mapeo.Hibernate problemas con 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> 

Aquí es el SQL generado

inserto en contacto (título, nombre apellido, middle_name, apellidos, sufijos, job_title, fecha de nacimiento, passport_number, passport_expiration, empleador, 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) values ​​(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, ?,?,?,?)

Aquí es la parte importante del seguimiento de la pila:

org.hibernate.AssertionFailure: id nulo en la entrada org.XXXXXXX.Contact (No echar la sesión después de que ocurre una excepción)

tengo intenté configurar el valor no guardado a "0" y "-1" y enviarlos a través del cable. ¿Alguna idea sobre lo que estoy haciendo mal?

Respuesta

10

Debe recordar que Hibernate es una capa de persistencia y debe ser capaz de realizar un seguimiento de dónde está un objeto en la base de datos. Por lo tanto, cuando hace una inserción, en realidad tendrá que consultar el contador de incremento automático para ver cuál debería ser la próxima identificación. A continuación, inserta el ID en el objeto e inserta el objeto en la base de datos. Entonces, para que hibernate haga insert, usa necesidades para seleccionar primero (a menos que esté usando algún tipo de GUID generado por la aplicación). Al usar el auto-incremento de MySQL, use el generador de "identidad".

Explicación de los diferentes generadores:

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

Un hibernación código XML fragmento:

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

Cambiando la clase de generador funcionó. A través del enlace provisto, pude solucionar mi problema. Terminé demandando incremento en lugar de identidad. ¡Gracias! –

0

"incremento" generador no forma clúster de usar. Si algún otro proceso se inserta en la misma tabla. La siguiente inserción de hibernación fallará

Cuestiones relacionadas