![](/img/trans.png)
[英]Cannot delete or update a parent row: a foreign key constraint fails. Foreign keys exist though
[英]I cannot delete a record "Cannot delete or update a parent row: a foreign key constraint fails. How do I fix this?
我试图删除评级表中的记录,然后
无法添加或更新子行:外键约束失败(
fyprojectdb
.ratings
, CONSTRAINTFKdyash6f91887unaan9mj9b460
FOREIGN KEY (answer_id
) REFERENCESanswers
(answer_id
))
发生此错误。 如何修复此错误。 我已经正确映射了两个实体。
@Entity
@Table(name = "ratings")
public class Ratings {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long rating_id;
@Column(nullable = false, unique = false, length = 45)
private Short ratingValue;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "userId")
private User user;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "answer_id")
private Answer answer;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "question_id")
private Question question;
//getters and setters
@Entity
@Table(name = "answers")
public class Answer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long answer_id;
@Column(nullable = false, unique = false, length = 100)
private String fullAnswer;
/*Many to one mapping question*/
@ManyToOne(cascade = CascadeType.REMOVE)
@JoinColumn(name = "question_id")
private Question question;
/* Many to One mapping with users*/
@ManyToOne(cascade = CascadeType.REMOVE)
@JoinColumn(name = "userId")
private User user;
//getters and setters
原因是这里的cascade = CascadeType.ALL
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "userId")
private User user;
这意味着在删除任何Ratings
后必须删除User
。
最好使用RatingEntity
作为实体,使用RATINGS
作为表名。
一般规则
切勿将任何cascade
与关联的@ManyToOne
部分一起使用!
还要始终将fetch = FetchType.LAZY
与@ManyToOne
一起使用。
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "userId")
private User user;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "answer_id")
private Answer answer;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "question_id")
private Question question;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.