Spring Boot中的外键(MySQL,Hibernate,JPA)

时间:2018-07-09 09:41:03

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

我正在尝试使用Spring Boot编写RESTful API,但无法找到一种在数据库中映射我的关系的方法。我有一个用户和一个报表表。每个用户可以有多个报告,并且一个报告由“ FROM USER”和“ TO USER”列组成,以指示谁发送了报告以及向谁发送了报告。我的用户ID是主键,对于报表,我正在使用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类中的行。谢谢!

1 个答案:

答案 0 :(得分:0)

我终于通过如下更改User类来解决它-

form(method="POST" action="/mail")
        case (type)
            when 'slider'
                block
                .row
                    .col-md-8
                        .QapTcha
                            .bgSlider
                                .Slider.ui-draggable.ui-draggable-handle.e-resize.absolute
                                    .text-center.text-white(style='cursor:e-resize')
                                        i.fa.fa-chevron-right.btn-m-t-QapTcha.align-middle
                        input.d-none.submit(type='submit' name='submit' id=options.id submit=options.submit load=options.load)
                        div(style='fonts-size:11px')!=options.text
            when 'button'
                .row
                    .col-sm-12
                        .panel.panel-info
                            .panel-body
                                block
                .panel-footer
                    .form-group
                        button.btn.btn-primary.btn-lg.btn-block.submit(id=options.inputId submit=options.submit load=options.load type='submit')!=options.text
            default
                +createForm(options, 'slider')
        .feedback

,然后将我的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;