试图从父实体java类中删除记录
Posted
技术标签:
【中文标题】试图从父实体java类中删除记录【英文标题】:Trying to delete a record from a parent entity java class 【发布时间】:2015-09-29 21:19:55 【问题描述】:我有两个实体 java 类。现在我正在尝试从父实体中删除一条记录,但它抛出了一个错误:org.hsqldb.HsqlException: integrity constraint violation: foreign key no action; SYS_FK_10142 table: CHILD
。
**Parent class**
@Entity
@Table(name = "Parent")
public class Parent
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotBlank
@Column(name = "data")
private String data;
public Long getId()
return id;
public void setId(Long id)
this.id = id;
public String getData()
return data;
public void setData(String data)
this.data = data;
**Child class**
@Entity
@Table(name = "Child")
public class Child
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotBlank
private String model;
@ManyToOne()
@OnDelete(action= org.hibernate.annotations.OnDeleteAction.CASCADE)
private Parent parent;
public Long getId()
return id;
public void setId(Long id)
this.id = id;
public String getModel()
return model;
public void setModel(String model)
this.model = model;
【问题讨论】:
尝试同时指定OnUpdate
操作。
你能把代码贴在你要删除父级的地方吗?
【参考方案1】:
由于您要删除父记录并期望关联的子记录也被删除,因此您可能需要双向关系。
@Entity
@Table(name = "Parent")
public class Parent
...
...
@OneToMany(mappedBy = "parent", cascade = javax.persistence.CascadeType.REMOVE)
private List<Child> children;
@Entity
@Table(name = "Child")
public class Child
...
...
@ManyToOne
@JoinColumn(name="parent_id", referencedColumnName="id")
private Parent parent;
【讨论】:
iirc,声明CascadeType.REMOVE
不会删除孩子,而只是删除关系。如果你想删除孩子,我相信你需要orphanRemoval=true
@AdrianShum:您的评论并不完全正确。如果您使用CascadeType.REMOVE
调用 em.remove(parent),则所有对子实体的引用也会被删除。请参阅REMOVE 的文档。另一方面,orphanRemoval=true
仅在您想从父集合中删除子实体时才需要,例如当你调用 parent.children.remove(child) 时。
谢谢大家。我很感激。以上是关于试图从父实体java类中删除记录的主要内容,如果未能解决你的问题,请参考以下文章