sql >> Base de Datos >  >> RDS >> Mysql

Hibernar Guardar comportamiento extraño

Su mayor problema es una columna incorrecta en <key> mapeo:debe ser "user_id", no "id". Dicho esto, todo tu mapeo me parece un poco extraño.

En primer lugar, si desea que los ID se generen automáticamente, debería dejar que Hibernate se encargue de eso especificando el generador apropiado:

 <id column="id" name="id">
   <generator class="native"/>
 </id>

Lea Documentación de Hibernate en generadores para varias opciones disponibles.

En segundo lugar, si todo lo que necesita es un conjunto de tipos de cadenas, considere volver a asignarlos a una colección de elementos en lugar de una relación de uno a muchos:

 <set name="types" table="types">
    <key column="user_id"/>
    <element column="type" type="string"/>
 </set> 

De esa manera, no necesitará una clase o mapeo explícito de "Tipos" para ello. Incluso si desea tener atributos adicionales en "Tipos", aún puede asignarlo como componente en lugar de como entidad.

Finalmente, si "Tipos" debe ser una entidad debido a algún requisito que no ha descrito, la relación entre "Usuarios" y "Tipos" es bidireccional y debe mapearse como tal:

 <set name="types" table="types" inverse="true">
    <key column="user_id"/>
    <one-to-many class="Types"/>
 </set>

 ...
 in Types mapping:
 <many-to-one name="user" column="user_id" not-null="true"/>

En el último caso, "Tipos" tendría que tener una propiedad de "usuario" de tipo "Usuarios".Aquí es un ejemplo detallado.