最大の問題は、<key>の列が正しくないことです。 マッピング-「id」ではなく「user_id」である必要があります。そうは言っても、あなたのマッピング全体は私には少し奇妙に思えます。
まず、IDを自動生成する場合は、適切なジェネレーターを指定して、Hibernateにそれを処理させる必要があります。
<id column="id" name="id"> <generator class="native"/> </id>
Hibernateドキュメントをお読みくださいa> さまざまな利用可能なオプションのジェネレーター。
次に、必要なのが文字列タイプのセットだけである場合は、1対多の関係ではなく、要素のコレクションにそれらを再マッピングすることを検討してください。
<set name="types" table="types">
<key column="user_id"/>
<element column="type" type="string"/>
</set>
そうすれば、明示的な「Types」クラスやマッピングは必要ありません。 「タイプ」に追加の属性が必要な場合でも、エンティティではなくコンポーネントとしてマップできます。
最後に、説明していない要件のために「タイプ」がエンティティである必要がある場合、「ユーザー」と「タイプ」の関係は双方向であり、次のようにマッピングする必要があります。
<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"/>
後者の場合、「Types」には「Users」タイプの「user」プロパティが必要です。ここ 詳細な例です。