161117、使用spring声明式事务抛出 identifier of an instance of

今天项目组有成员使用spring声明式事务出现下面异常,这里跟大家分享学习下。
异常信息:
org.springframework.orm.hibernate3.HibernateSystemException: identifier of an instance of com.xxx.entity.Activity was altered from 33 to null; nested exception is org.hibernate.HibernateException: identifier of an instance of com.xxx.entity.Activity was altered from 33 to null
出现异常代码:(都是在service层中的一个方法里)
@Service
@Transactional
public class GroupServiceImpl extends CoreManagerImpl<Group> implements GroupService
省略	
@Override
	public Group updateGroup(Group group,Group old) throws Exception {
		Group doGroupUpdate = doGroupUpdate(group, old);
		List<SubGroup> subs = doSubGroupsUpdate(group.getSubGroups(), doGroupUpdate.getId());
		doGroupUpdate.setSubGroups(subs);
		Activity activity = updateActivity(doGroupUpdate);
		activity.setId(null);//发生异常的原因
		updateSeller(doGroupUpdate);
		doGroupUpdate.setActivity(activity);
		return doGroupUpdate;
	}
修复后代码:
	@Override
	public Group updateGroup(Group group,Group old) throws Exception {
		Group doGroupUpdate = doGroupUpdate(group, old);
		List<SubGroup> subs = doSubGroupsUpdate(group.getSubGroups(), doGroupUpdate.getId());
		doGroupUpdate.setSubGroups(subs);
		Activity activity = updateActivity(doGroupUpdate);
		//activity.setId(null);
		updateSeller(doGroupUpdate);
		doGroupUpdate.setActivity(activity);
		return doGroupUpdate;
	}
原因分析:
使用spring声明试事务,在整个事务(里面有多个子事务)没有提交成功,就将id主键设置成了null(主键不可以为null),所以会抛出上述异常。spring声明式事务是在所有子操作都完成一起提交事务的。

  

转载于:https://www.cnblogs.com/zrbfree/p/6141224.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值