Váš největší problém je nesprávný sloupec v <key>
mapování - mělo by to být "user_id", nikoli "id". To znamená, že celé vaše mapování mi připadá trochu zvláštní.
Za prvé, pokud chcete, aby se ID generovala automaticky, měli byste opravdu nechat Hibernate, aby se o to postarala zadáním vhodného generátoru:
<id column="id" name="id"> <generator class="native"/> </id>
Přečtěte si Dokumentaci k hibernaci na generátorech pro různé dostupné možnosti.
Za druhé, pokud vše, co potřebujete, je sada typů řetězců, zvažte jejich přemapování do kolekce prvků spíše než na vztah jeden k mnoha:
<set name="types" table="types"> <key column="user_id"/> <element column="type" type="string"/> </set>
Tímto způsobem pro to nebudete potřebovat explicitní třídu "Typy" nebo mapování. I když chcete mít v "Typech" další atributy, stále je můžete mapovat jako komponentu, nikoli jako entitu.
A konečně, pokud „Typy“ musí být entita kvůli nějakému požadavku, který jste nepopsali, vztah mezi „Uživateli“ a „Typy“ je obousměrný a je třeba jej takto mapovat:
<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"/>
V druhém případě by "Types" musel mít vlastnost "user" typu "Users".Zde je podrobným příkladem.