JPA one-many在映射后给出null值

时间:2012-12-11 10:48:47

标签: java java-ee jpa mapping one-to-many

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

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

1 个答案:

答案 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中主键的名称,因此需要在实际代码中替换它。

在进一步查看代码之后,我假设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 
}

<强> Dashboard.java

@Entity
public class Dashboard{

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

     //Other fields/Getters/Setters

}