spring data jpa上的级联删除问题

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<>();
}

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

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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值