gpt4 book ai didi

java - JPA 一对多在映射后给出空值

转载 作者:行者123 更新时间:2023-11-30 04:34:31 25 4
gpt4 key购买 nike

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

我有三个类: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 类可以正常工作。执行我的代码后,我的仪表板的属性中有一个仪表板用户,但是该用户的仪表板用户具有空值。

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

最佳答案

User添加@JoinColumn注释

@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

}

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com