有人可以指出我做错了什么(跟进前面的问题)?
我有三个类: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值为null。
数据库中的表有两个字段:IDUser和IDDashboard(我使用正确的userID和dashboardID)。有人看到我的错误吗?
答案 0 :(得分: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
关系进行映射。一个用户可以访问许多仪表板,而仪表板可能有许多用户,因此有多对多的关系。以下映射将在用户和仪表板之间创建多对多关系。
<强> 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
}
<强> Dashboard.java 强>
@Entity
public class Dashboard{
@ManyToMany(mappedBy="dashboards")
private List<Users> users;
//Other fields/Getters/Setters
}