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

JPAは多対多で持続します

    最初に、私を答えに導いてくれたミッコに感謝します。自分がいた立場にいる他の人に直接役立つかもしれない答えを投稿したかっただけです。また、これはエウレカの瞬間に基づいているため、技術的に正しくない可能性がありますが、これが私の見方です。

    私が直面している大きな問題は、MySQLではブリッジングテーブルを個別のテーブルとして見ることができるということでした。 (申し訳ありませんが、EERダイアグラムの画像を投稿することはできませんが、現時点では十分な権限がないようです)したがって、Javaもブリッジテーブルをテーブルと見なすと思いました。そうではありません。そのブリッジテーブルは、従来のテーブルとしてJavaには実際には存在しません。実際には、関連付けられた反対のテーブルコレクションタイプによって表されます。

    私にとってそれを見る最も簡単な方法は、ブリッジングテーブルを完全に忘れて、2つの「実際の」テーブルに集中し、それらのデータを関連付けることでした。次のコードは、単にrole_idを設定しているため、ベストプラクティスではありませんが、ポイントを示すだけで問題ありません。

    List<Roles> userRoleList = new ArrayList<Roles>();
    
    Users currentUser = new Users();
    currentUser.setUserId(userId);
    currentUser.setUsername(email);
    currentUser.setPassword(password);
    
    Roles userRole = new Roles();
    userRole.setRoleId("2");
    
    userRoleList.add(userRole);
    currentUser.setRolesCollection(userRoleList);
    
    getUsersFacade().create(currentUser);
    

    多対多の関係に苦しんでいる他の人の助けになることを願っています。

    (注:元の質問コードを編集して、コレクションの代わりにリストを使用するようにしましたが、ニーズに合った他のタイプを使用することもできます。)



    1. 条件に基づいて、別のテーブルの列で列の値を更新します

    2. データベースバックアップ-MariaDBMariabackupとPerconaXtrabackupの比較

    3. カンマ区切りのリストに関するMysqlWHEREの問題

    4. InnoDBテーブルが完全エラーです