Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Hibernate Save seltsames Verhalten

Ihr größtes Problem ist eine falsche Spalte in <key> Mapping - es sollte "user_id" sein, nicht "id". Allerdings kommt mir dein ganzes Mapping etwas seltsam vor.

Zuallererst, wenn Sie möchten, dass IDs automatisch generiert werden, sollten Sie Hibernate dies wirklich überlassen, indem Sie den entsprechenden Generator angeben:

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

Lesen Sie die Dokumentation zu Hibernate auf Generatoren für verschiedene verfügbare Optionen.

Zweitens, wenn alles, was Sie brauchen, eine Reihe von String-Typen ist, ziehen Sie in Betracht, sie in eine Sammlung von Elementen umzuwandeln, statt in eine Eins-zu-Viele-Beziehung:

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

Auf diese Weise benötigen Sie keine explizite "Types" -Klasse oder Zuordnung dafür. Selbst wenn Sie zusätzliche Attribute für "Typen" haben möchten, können Sie sie immer noch als Komponente und nicht als Entität zuordnen.

Wenn schließlich „Types“ aufgrund einer Anforderung, die Sie nicht beschrieben haben, eine Entität sein muss, ist die Beziehung zwischen „Users“ und „Types“ bidirektional und muss als solche abgebildet werden:

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

Im letzteren Fall müsste "Types" eine "user"-Eigenschaft vom Typ "Users" haben.Hier ist ein detailliertes Beispiel.