有人可以指出我做错了吗(前面问题的跟进)?
我有三个类: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
中主键的名称,因此需要在实际代码中替换它。在进一步查看代码之后,我假设
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
}
仪表板
@Entity
public class Dashboard{
@ManyToMany(mappedBy="dashboards")
private List<Users> users;
//Other fields/Getters/Setters
}
关于java - JPA一对多映射后给出空值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13818656/