【问题标题】:com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint failscom.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:无法删除或更新父行:外键约束失败
【发布时间】:2018-11-12 07:08:35
【问题描述】:

我将按 id 删除对象,但出现如下错误:

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: 无法删除或更新父行: 外键约束失败 (mydatabase.assignmentaudit, CONSTRAINT FKqgsllo6dm5kdx7ptc3qu5mefd FOREIGN KEY (auditor_group_id ) 参考auditor_group (auditor_group_id))

我通过id删除的方法是:

@DeleteMapping("/assignment-audit/{id}")
    public ResponseEntity<String> deleteAssignmentAudit(@PathVariable("id") long id) {
        System.out.println("Delete AssignmentAudit with ID = " + id + "...");

        assignmentAuditRepository.deleteById(id);

        return new ResponseEntity<>("Assignment Audit has been deleted!", HttpStatus.OK);
    }

我的表的映射如下:

Selection.java

@Entity
@Table(name="selection")
public class Selection implements Serializable {


    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long selectionId;

    @Column(name="selection_date")
    private String selectionDate;

    @Column(name="selected_by")
    private String selectedBy;

    @Column(name="pan_exim_number")
    private Long panEximNumber;

    @Column(name="name")
    private String name;

    @Column(name="address")
    private String address;

    @Column(name="phone_number")
    private String phoneNumber;

    @Column(name="selection_type")
    private String selectionType;

    @Column(name="consignment_no")
    private String consignentNo;

    @Column(name="consignment_date")
    private String consignentDate;


    @Column(name="selection_period_from_date")
    private String selectionPeriodFromDate;

    @Column(name="selection_period_to_date")
    private String selectionPeriodToDate;

    @Column(name="agent_no")
    private Long agentNo;

    @Column(name="custom_office")
    private String customOffice;


    @OneToMany(mappedBy="selection")
    private List<AssignmentAudit> assignmentAudit;
//i omitted getters and setters as i have in my program
}

AssignmentAudit.java

@Entity
@Table(name = "assignmentaudit")
public class AssignmentAudit implements Serializable {


    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @ManyToOne(fetch = FetchType.EAGER, optional = false,cascade=CascadeType.ALL)
    @JoinColumn(name = "auditorGroupId")
    private AuditorGroup auditorGroup;

    @Column(name = "assignmentDate")
    private String assignmentDate;

    @ManyToOne(fetch = FetchType.EAGER, optional = false,cascade=CascadeType.ALL)
    @JoinColumn(name = "selectionId")
    @JsonIgnore
    private Selection selection;
}

AuditorGroup.java

@Entity
@Table(name = "auditor_group")
public class AuditorGroup implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long auditorGroupId;

    @Column(name="group_desc")
    private String groupDesc;

    @Column(name="from_date")
    private String fromDate;

    @Column(name="to_date")
    private String toDate;
}

AssignmentAuditRepository.java

public interface AssignmentAuditRepository extends JpaRepository<AssignmentAudit, Long> {

}

我只需要删除assignmentAudit 通过它的id 这样selectionauditGroupassignmentAudit 被删除时保持不变并且不受影响。

【问题讨论】:

    标签: java spring hibernate spring-boot jpa


    【解决方案1】:

    您必须从 @ManyToOne 映射中删除 cascade=CascadeType.ALL

    或者更改它,使CascadeType.DELETE 不包括在内。

    【讨论】:

    • 我怎么能只忽略所有类型的 cascadetype.delete?我需要确切的代码来更改它
    • 谢谢你改变和工作:) 非常感谢你的帮助
    猜你喜欢
    • 2017-09-27
    • 2017-06-11
    • 1970-01-01
    • 2019-05-25
    • 2014-11-11
    • 2018-05-12
    • 2017-09-15
    • 1970-01-01
    相关资源
    最近更新 更多