Mysql
 sql >> Base de données >  >> RDS >> Mysql

Hibernation Enregistrer un comportement étrange

Votre plus gros problème est une colonne incorrecte dans le <key> mappage - il doit s'agir de "user_id", et non de "id". Cela dit, toute votre cartographie me semble un peu étrange.

Tout d'abord, si vous voulez que les identifiants soient générés automatiquement, vous devriez vraiment laisser Hibernate s'en occuper en spécifiant le générateur approprié :

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

Lisez la Documentation Hibernate sur les générateurs pour diverses options disponibles.

Deuxièmement, si tout ce dont vous avez besoin est un ensemble de types de chaînes, envisagez de les remapper dans une collection d'éléments plutôt que dans une relation un-à-plusieurs :

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

De cette façon, vous n'aurez pas besoin d'une classe ou d'un mappage "Types" explicites pour cela. Même si vous souhaitez avoir des attributs supplémentaires sur "Types", vous pouvez toujours le mapper en tant que composant plutôt qu'en tant qu'entité.

Enfin, si "Types" doit être une entité en raison d'une exigence que vous n'avez pas décrite, la relation entre "Utilisateurs" et "Types" est bidirectionnelle et doit être mappée comme telle :

 <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"/>

Dans ce dernier cas, "Types" devrait avoir une propriété "user" de type "Users".Ici est un exemple détaillé.