欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

spring data jpa上的级联删除问题

程序员文章站 2022-05-01 23:27:14
...

spring data jpa上的级联删除

先来看一段报错:

Caused by: java.sql.SQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (blog.t_blog, CONSTRAINT FK292449gwg5yf7ocdlmswv9w4j FOREIGN KEY (type_id) REFERENCES t_type (id))

大致说的是在我要删除某一条数据的时候被拒绝了,原因是存在其他表已将该表的主键设为了它的外建,所以没办法单独的删除该表数据。


而最初t_blog表和t_type表的关系是这样的:

@Entity
@Table(name = "t_blog")
public class Blog {
	@ManyToOne	//多的一方是维护端。
    private Type type;
}
@Entity
@Table(name = "t_type")
public class Type {
    @OneToMany(mappedBy = "type")
    private List<Blog> blogs = new ArrayList<>();
}

可以看出表中并没有指出两张表直接的级联等级。所以要解决这个问题就应该手动在被维护端上执行级联等级,下面是修改后的Class Type

@Entity
@Table(name = "t_type")
public class Type {
 								//cascade在这里是一个数组,可同时指定多种级联等级
    @OneToMany(mappedBy = "type",cascade = {CascadeType.REMOVE})	
    private List<Blog> blogs = new ArrayList<>();
}

再添加完级联删除后是什么样的结果呢?

  • 当你删除维护端的一条数据时,会同时将那些将该数据主键作为自己外建的数据都删除。

当两表关系为多对多时,在维护端删除一条数据后,只会同时删除包含改数据主键的中间表的数据,而不会影响另一张表。

相关标签: Java java