1

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

我有三个类:仪表板、仪表板用户和用户。

仪表板工作正常,代码如下:

 @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)。有人看到我的错误吗?

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是一个连接表DashboardUser它映射了用户可以访问的仪表板。这种情况最好由@ManyToMany关系映射。一个用户可能有权访问多个仪表板,而一个仪表板可能有许多用户,因此是多对多关系。以下映射将在用户和仪表板之间创建多对多关系。

用户.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 回答