1

誰かが私が間違っていることを指摘できますか (以前の質問のフォローアップ)?

Dashboard、DashboardUser、および User の 3 つのクラスがあります。

ダッシュボードは、次のコードで正常に動作します。

 @OneToMany(cascade= CascadeType.ALL, orphanRemoval = true, mappedBy="dashboard")
    private List<DashboardUser> dashboardUsers = new ArrayList<>();

DashboardUser には、次の 2 つの JPA 宣言が含まれています。

    @Id
    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name = "IDUser")
    private User user;

    @Id
    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name = "IDDashboard")
    private Dashboard dashboard;

問題は User.java にあります。

@OneToMany(cascade= CascadeType.ALL, orphanRemoval = true, mappedBy="user")
    private List<DashboardUser> dashboardUsers;

見た目は同じですが、Dashboard クラスだけが正常に機能します。私のコードを実行した後、私のダッシュボードには彼の属性の中でdashboardUserがありますが、ユーザーはdashboardUserの値がnullです。

データベースのテーブルには、IDUser と IDDashboard の 2 つのフィールドがあります (正しい userID と dashboardID を使用しています)。誰かが私の間違いを見ていますか?

4

1 に答える 1

2

@JoinColumnに注釈を追加するUser

@OneToMany(cascade= CascadeType.ALL, orphanRemoval = true, mappedBy="user")
@JoinColumn(name="dashBoardUserId") //Replace with actual column name
private List<DashboardUser> dashboardUsers;

主キーの名前を推測DashboardUserする必要があったため、実際のコード内で置き換える必要があります。

コードをさらに調べた後、DashboardUserは と の間のジャンクション テーブルでDashboardありUser、ユーザーがアクセスできるダッシュボードをマップするものであると想定しました。@ManyToManyこのシナリオは、関係によって最適にマップされます。1 人のユーザーが多くのダッシュボードにアクセスできる一方で、ダッシュボードには多くのユーザーがいる場合があるため、多対多の関係になります。次のマッピングは、ユーザーとダッシュボードの間に多対多の関係を作成します。

ユーザー.java

public class User{

    @ManyToMany(cascade={CascadeType.ALL}, targetEntity=Dashboard.class)
        @JoinTable(name="DASHBOARD_USER", 
        joinColumns={@JoinColumn(name="IDUser", referencedColumnName="IDUser")},
        inverseJoinColumns={@JoinColumn(name="IDDashboard",       
        referencedColumnName="IDDashboard")})
     public List<Dashboard> dashboards = new ArrayList<Dashboard>();

     //Other fields/Getters/Setters 
}

ダッシュボード.java

@Entity
public class Dashboard{

     @ManyToMany(mappedBy="dashboards")
     private List<Users> users;

     //Other fields/Getters/Setters

}
于 2012-12-11T10:51:29.897 に答える