当前位置: 首页 > 知识库问答 >
问题:

为什么我在使用CascadeType时也出现了DataIntegrityViolationException。全部的

莘钧
2023-03-14

我有一张表有这样的关系:

parent 

|      \

child1   child1

      /        \

grandchild1  grandchild2

我打电话给孙子、孩子和父母只是为了说明这个问题...不是继承问题

@Entity
@Table(name = “parent")
@Data
@EqualsAndHashCode(callSuper = true, exclude = { “..." })
@ToString(exclude = { “..." })
@NoArgsConstructor
public class Parent {

   private static final long serialVersionUID = 1L;

   @OneToMany(mappedBy = “parent")
   @Cascade({org.hibernate.annotations.CascadeType.ALL})
   private Set<Child> children; 
}

Child.java

@Entity
@Table(name = “child")
@Data
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
public class Child {

   private static final long serialVersionUID = 1L;
   
   @ManyToOne
   @JoinColumn(name = “parent_id")
   private Parent parent;
   
   @OneToMany(mappedBy = “child")
   @Cascade({org.hibernate.annotations.CascadeType.ALL})
   @LazyCollection(LazyCollectionOption.FALSE)
   private List<Grandchild> grandchildren = new ArrayList<>();
   
}

我正试图直接删除一个带有级联类型的父对象。我觉得没什么问题。但当我试图删除时,我得到:

08-26 11:36:33,755错误[SqlExceptionHelper]无法删除或更新父行:外键约束失败(数据库.>id))2020-08-26 11:36:33,773信息[AbstractBatchImpl]HHH000010:批处理发布时,它仍然包含JDBC语句-2020 11:36:33.776警告[超文本传输协议-Nio-8080-exec-6]com.sun.faces.lifecycle.InvokeApplication ationPhase.execute#{删除()}:org.springframework.dao.数据完整性违反异常:无法执行语句;SQL[n/a];约束[null];嵌套异常是org.hibernate.exception.约束违反异常:无法执行语句

我认为从JPA导入CascadeType而不是从org.hibernate.导入CascadeType可能是一个错误,我也尝试只使用JPA代码,如@OneTo很多(mappdBy="父",孤儿移除=true,级联=CascadeType。所有)没有工作。

代码

parent.setChildren(null);
parentRepository.delete(parent); //throws the exception

依赖关系

  • Spring数据JPA 1.7.0
  • 冬眠4.2.1。期末考试
  • Spring集成JDBC 2.2.6
  • Spring集成JPA 2.2.6

我做错了什么?

共有1个答案

郏佐
2023-03-14

即使关系定义为双向,级联删除始终是单向的。

从外键引用的主表中删除时,引用该项的条目将被删除。

我将在您用JoinColumn注释的属性中建立级联删除,即有名称的属性,而不是在映射的属性中。

删除一位祖父,他的子孙后代也应该被删除。

 类似资料:
  • 我想在RxJava中实现一个下载一些文件的处理队列。我想下载的文件数量可能高达100个左右。 一切都是在Android上使用RxJava 1.1.1开发的 我做错了什么?

  • 我正在中写入我的。当我编写Ndf记录时,它工作得很好,但当我尝试使标签只读时,我得到了。这是发生异常的代码: 该makeReadOnly适用于Mifare Ultralight (MF0ICU1)标签。

  • 问题内容: 这是原始代码 这里私有的int x,y不是最终值是很好的,因为构造函数中的set方法会在调用get时在关系发生之前发生,因为它们使用相同的锁。 现在,这里是修改后的版本和主要方法,由于在set方法中删除了synced关键字,因此我希望在运行它后再抛出AssertionError。如果有人指出它不是线程安全的,那我就将构造函数私有化为唯一的调用者,这不是我关注的重点。 无论如何,我现在已

  • 我正在使用Maven 3部署到我们的集群。在我的设置中设置了私钥。xml以及pom中的存储库。xml。目前一切正常,除了在我调用时被要求输入密码之外。如果我使用

  • 问题内容: 这是我运行的行: 这是我从LogCat获得的异常: 错误/AndroidRuntime(311):java.lang.NoClassDefFoundError:javax.sound.sampled.AudioSystem 这是我一年前编写的旧程序,然后运行良好。为什么会出现此异常,我该如何解决? 问题答案: 是JavaSound的一部分,而JavaSound是桌面JVM / SDK的

  • 认证之后,如果我调用任何方法,比如< code>os.compute()。口味()。list()或< code>os.images()。list(),我得到< code >连接超时。为什么会这样? 我在GoogleCloudsPlataform VM上设置了一个带有RDO包堆栈的OpenStack。我正在对域和项目进行身份验证。我尝试了没有项目的身份验证,方法调用没有超时,但是响应是错误的,例如,