sql >> データベース >  >> RDS >> Mysql

Hibernate奇妙な動作を保存する

    最大の問題は、<key>の列が正しくないことです。 マッピング-「id」ではなく「user_id」である必要があります。そうは言っても、あなたのマッピング全体は私には少し奇妙に思えます。

    まず、IDを自動生成する場合は、適切なジェネレーターを指定して、Hibernateにそれを処理させる必要があります。

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

    Hibernateドキュメント さまざまな利用可能なオプションのジェネレーター。

    次に、必要なのが文字列タイプのセットだけである場合は、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」プロパティが必要です。ここ 詳細な例です。



    1. SQLiteの結果をテーブルとしてフォーマットする方法

    2. PostgreSQLのタイムスタンプに基づく移動平均

    3. 特定の行番号から始まるMySQLの行を選択するにはどうすればよいですか?

    4. 選択したドロップリスト項目に応じて、MySQLから複数の入力フィールドに動的に入力します