在delete set null时使用



在本例中,answer_id是评级表中的外键,而answer_id是答案表中的主键。我需要删除答案,但"不能删除或更新父行:外键约束失败。错误发生。如何为外键设置ON DELETE set NULL选项

@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 = fetch = FetchType.LAZY)
@JoinColumn(name = "userId")
private User user;
@ManyToOne(cascade = fetch = FetchType.LAZY)
@JoinColumn(name = "answer_id")
private Answer answer;
@ManyToOne(cascade = fetch = FetchType.LAZY)
@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 = FetchType.LAZY)
@JoinColumn(name = "question_id")
private Question question;
/* Many to One mapping with users*/
@ManyToOne(cascade = FetchType.LAZY)
@JoinColumn(name = "userId")
private User user;
//getters and setters

Hibernate不支持SET NULL操作。

该特性请求创建于2006年,目前仍处于"打开"状态。状态。

  • @OnDelete→action = OnDeleteAction。SET_NULL(如MySql 5)

一种解决方法是在父实体上创建@PreRemove方法,将子实体中的外键设置为NULL。我想如果您添加其他子实体,您必须修改您的@PreRemove方法。请看下面的例子:

  • 让JPA/Hibernate复制';ON DELETE SET null ';功能

最新更新