mysql - Spring Boot 中的外键(MySQL、Hibernate、JPA)

标签 mysql hibernate spring-boot spring-data-jpa spring-rest

我正在尝试使用 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/

相关文章:

php - Yosemite 上的 MAMP - 连接错误 : SQLSTATE[HY000] [2002] No such file or directory

java - Hibernate HQL 错误 - 意外标记 :

java - JPA 延迟获取不起作用并抛出 LazyInitializationException

java - 支持 JPA 的企业应用程序的 Spring 和 Hibernate 对业务有何帮助?

rest - 如何在 JHipster 中添加自定义 Restful Web 服务?

java - 如何使用 Angular 2 在 Spring 引导中导出 excel 文件?

mysql - 如何循环遍历 SQL 查询结果? (以及一些关于 SQL 结果操作的进一步问题。)

mysql - 如何根据 SQL 中另一个字段的值选择一个字段?

PHP 搜索 MySQL 数据库框架

java - 为什么我的 Spring Boot (mongo) bean 没有被创建/使用?