save the transient instance before flushing-Hibernate异常

本文探讨了在保存未持久化的Bean时遇到的一种常见异常——savethetransientinstancebeforeflushing,并提供了具体的解决方案,即确保外键指向已存在的实体或为空。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    保持还未被持久化的bean时,bean中包含外键且外键未被赋值,则会报“save the transient instance before flushing”这样的异常。异常的字面意思大概是刷入之前有临时实例将被保存。

    根据这个字面意思,猜测是因为外键指向了临时实例,因此将外键主动赋值为空,或者将外键赋值真正存在并且被持久化的实例,这个错误就解决了。

比如:

			if (menu.getId() == null || menu.getId() < 0) {
				menu.setParent(null);//外键在新建时必须主动设置为null,或者设置为指定的外键实体,否则会报执行临时(transient)错误。
				menu.setMenuCollection(new ArrayList<>());
				menu.setRoleCollection(new ArrayList<>());
			}

菜单项有可能没有父菜单项,因此需要主动设置为null,然后才能在保存时不报错。

    BTW:这儿也佐证了null是个对象。

转载于:https://my.oschina.net/dayu6/blog/842437

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值