【问题标题】:Foreign Keys in Spring Boot (MySQL, Hibernate, JPA)Spring Boot 中的外键(MySQL、Hibernate、JPA)
【发布时间】:2018-12-16 22:56:04
【问题描述】:

我正在尝试使用 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 类中的行。谢谢!

【问题讨论】:

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


    【解决方案1】:

    我终于通过如下更改我的用户类来修复它 -

    @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;
    

    通过将我的报告类更改为 -

    @Column(name = "from_user_id")
    private Long fromUserId;
    
    @Column(name = "to_user_id")
    private Long toUserId;
    

    【讨论】:

      猜你喜欢
      • 2017-03-08
      • 2020-08-01
      • 1970-01-01
      • 2017-08-11
      • 1970-01-01
      • 2018-07-28
      • 2020-02-04
      • 2016-03-08
      • 2021-09-19
      相关资源
      最近更新 更多