试图从父实体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类中删除记录的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate - 删除子项时如何从父项中删除实体

JPA删除实体

Symfony 原则防止特定实体的记录删除

在数据迁移期间删除实体中的所有记录

从实体框架中删除一条记录?

java orm/data access object - 删除记录的接口[关闭]