Twoim największym problemem jest nieprawidłowa kolumna w <key>
mapowanie - powinno być "user_id", a nie "id". To powiedziawszy, całe twoje mapowanie wydaje mi się trochę dziwne.
Po pierwsze, jeśli chcesz, aby identyfikatory były generowane automatycznie, powinieneś naprawdę pozwolić Hibernate zająć się tym, określając odpowiedni generator:
<id column="id" name="id"> <generator class="native"/> </id>
Przeczytaj Dokumentację hibernacji na generatorach dla różnych dostępnych opcji.
Po drugie, jeśli wszystko, czego potrzebujesz, to zestaw typów łańcuchów, rozważ ponowne zmapowanie ich na kolekcję elementów, a nie na relację jeden-do-wielu:
<set name="types" table="types"> <key column="user_id"/> <element column="type" type="string"/> </set>
W ten sposób nie będziesz potrzebować do tego jawnej klasy „Typy” ani mapowania. Nawet jeśli chcesz mieć dodatkowe atrybuty w „Typach”, nadal możesz mapować je jako komponent, a nie encję.
Wreszcie, jeśli „Typy” muszą być encjami ze względu na pewne nieopisane wymagania, relacja między „Użytkownikami” i „Typami” jest dwukierunkowa i musi być zmapowana w następujący sposób:
<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"/>
W tym drugim przypadku „Typy” musiałyby mieć właściwość „user” typu „Użytkownicy”.Tu jest szczegółowym przykładem.