我正在尝试使用 Spring Boot 编写一个 RESTful API,但我无法找到一种方法来映射我在数据库中的关系。我有一个用户和一个报告表。每个用户可以有多个报告,单个报告由“FROM USER”和“TO USER”列组成,以指示报告的发送者和收件人。我的用户 ID 是主键,对于 Report 表,我使用 AUTO INCREMENT 生成 REPORT ID 作为主键。这是我的用户模型类 -
@Entity
@Table (name = "user")
@EntityListeners(AuditingEntityListener.class)
public class User {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String firstName;
private String lastName;
private String email;
private String password;
@OneToMany(mappedBy = "user",cascade = CascadeType.ALL)
private List<Report> reportReceivedList;
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
private List<Report> reportSentList;
/* Getters and setters ..... */
}
这是我的报表模型类 -
@Entity
@Table (name = "report")
@EntityListeners(AuditingEntityListener.class)
public class Report {
@Id
@Column (name = "id")
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@ManyToOne()
@JoinColumn(name = "from_user_id")
private Long fromUserId; //THIS SHOULD BE FROM "USER" TABLE
@ManyToOne()
@JoinColumn(referencedColumnName = "to_user_id")
private Long toUserId; //THIS SHOULD BE FROM "USER" TABLE
@Temporal(TemporalType.DATE)
@CreatedDate
private Date createdAt;
private String observation;
private String context;
//Other variables and getters and setters .....
}
谁能告诉我正确定义这种关系的方法。我当前的模型不起作用。此外,我希望在删除用户后立即删除 REPORT 类中的行。谢谢!
最佳答案
我最终通过如下更改我的用户类来修复它 -
@OneToMany(cascade = CascadeType.ALL, targetEntity = Report.class)
@JoinColumn(name = "to_user_id")
private List<Report> reportReceivedList;
@OneToMany(cascade = CascadeType.ALL, targetEntity = Report.class)
@JoinColumn(name = "from_user_id")
private List<Report> reportSentList;
然后将我的 Report 类更改为 -
@Column(name = "from_user_id")
private Long fromUserId;
@Column(name = "to_user_id")
private Long toUserId;
关于mysql - Spring Boot 中的外键(MySQL、Hibernate、JPA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51242462/