hibernate配置级联删除时报错:could not execute statement; SQL [n/a]; constraint [null]

做博客管理系统时,博客和评论时一对多,多对一的关系,
一个博客多条评论,在删除博客时候报错
错误信息如下:
could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement
在这里插入图片描述
在这里插入图片描述
我的数据库里面blo_id不允许为空导致删除博客出现报错
在这里插入图片描述
解决方案:
在实体类 blog里面添加级联,问题解决
在这里插入图片描述

cascade(级联)

级联在编写触发器时经常用到,触发器的作用是当 主控表信息改变时,用来保证其关联表中数据同步更新。若对触发器来修改或删除关联表相记录,必须要删除对应的关联表信息,否则,会存有脏数据。所以,适当的做法是,删除主表的同时,关联表的信息也要同时删除,在hibernate中,只需设置cascade属性值即可。

cascade表示级联操作,在hibernate配置注解 @OneToOne,@OneToMany,@ManyToMany,@ManyToOne中的属性。

例如:
@ManyToOne(cascade = CascadeType.REFRESH, optional = true)@JoinColumn(name = "user_id", unique = false)private UserBaseInfo userBaseInfo;

cascade属性

cascade:就是对表进行增,删,改(查询与它无关)的时候对级联表进行操作
cascade属性的可选值:
all :所有情况下均进行关联操作。
none:所有情况下均不进行关联操作。这是默认值。
save-update:在执行save/update/saveOrUpdate时进行关联操作。
delete:在执行delete时进行关联操作。

inverse

inverse:决定主表还是从表维护关系
两个可选属性false与true
inverse属性默认是false,若为false,则关联由自己控制,
若为true,则关联由对方控制。
一般inverse=false会放在多的一端,

inverse 和 cascade两属性不同的值hibernate对应不同的行为

inverse=true, cascade=delete版本被删除,版本与项目的关联关系记录被删除
inverse=false, cascade=delete版本被删除时,hibernate尝试置关联关系为当前版本的记录,版本字段为null. 当置位失败时,版本不能删除

配置多种级联

例如:
在这里插入图片描述

  1. CascadeType.PERSIST:级联新增(又称级联保存):对order对象保存时也对items里的对象也会保存。对应EntityManager的presist方法。

  2. 例子:只有A类新增时,会级联B对象新增。若B对象在数据库存(跟新)在则抛异常(让B变为持久态)

  3. CascadeType.MERGE:级联合并(级联更新):若items属性修改了那么order对象保存时同时修改items里的对象。对应EntityManager的merge方法
    。 例子:指A类新增或者变化,会级联B对象(新增或者变化)

  4. CascadeType.REMOVE:级联删除:对order对象删除也对items里的对象也会删除。对应EntityManager的remove方法。

    例子:REMOVE只有A类删除时,会级联删除B类;

  5. CascadeType.REFRESH:级联刷新:获取order对象里也同时也重新获取最新的items时的对象。对应EntityManager的refresh(object)方法有效。即会重新查询数据库里的最新数据。

CascadeType.ALL:以上四种都是。
在此记录学习过程中遇到的错误,也许我讲的不是很清楚,哈哈,大佬还请勿喷,多多指教

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值