![](/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.