有人可以指出我做错了吗(前面问题的跟进)?

我有三个类:Dashboard,DashboardUser和User。

仪表板可以正常工作,并使用以下代码:

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


DashboardUser包含以下两个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值为空。

数据库中的表具有两个字段:IDUser和IDDashboard(我确实使用正确的userID和dashboardID)。有人看到我的错误了吗?

最佳答案

@JoinColumn添加User批注

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


我不得不猜测DashboardUser中主键的名称,因此需要在实际代码中替换它。

在进一步查看代码之后,我假设DashboardUserDashboardUser之间的连接表,该表映射了用户可以访问的仪表板。最好通过@ManyToMany关系映射此方案。一个用户可以访问许多仪表板,而一个仪表板可以具有许多用户,因此是多对多关系。以下映射将在用户和仪表板之间建立多对多关系。

User.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
}


仪表板

@Entity
public class Dashboard{

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

     //Other fields/Getters/Setters

}

关于java - JPA一对多映射后给出空值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13818656/

10-11 22:20