Hibernate 删除时异常

1. 当我删除主控方时,没有持久化,直接new一个主控方然后setID。可以删除中间表数据和主控方数据,被控方数据没有

改变。 问题:当我去删除一条没有的数据,会抛出org.hibernate.StaleStateException: Unexpected row count: 0 expected: 1,

解释是:使用的是hibernate的saveOrUpdate方法保存实例。saveOrUpdate方法要求ID为null时才执行SAVE,在其它情况下执行

UPDATE。在保存实例的时候是新增,但你的ID不为null,所以使用的是UPDATE,但是数据库里没有主键相关的值,所以出现异常。

很奇怪不知道为什么.应该会抛出org.hibernate.ObjectNotFoundException异常才对.
删除的代码:

public void removeUser(Integer userID) {
if(userID != null){
userDao.remove(new User(userID));
}
}

个人认为就解释来说有些问题,当我执行remove 方法去删除数据的时候,Hibernate会给据给出ID去查找数据,发现数据不存在.所以抛出异常.并不能直接说是在saveOrupdata方法才会抛异常.
.
2. 当去查找一个不存在的数据时,不执行user.getUserID();就不会抛出ObjectNotFoundException异常。只有到调用get/set方法,才会抛出。

所以当我们取出这个user时,实际对象是空的,当在去执行remove操作时,spring会抛出 嵌套着org.hibernate.ObjectNotFoundException的

org.springframework.orm.hibernate3.HibernateObjectRetrievalFailureException。意思是:

Hibernate-specific subclass of ObjectRetrievalFailureException. Converts Hibernate's UnresolvableObjectException and WrongClassException.
public void removeUser(Integer userID) {
if(userID != null){
User user = userDao.findByPK(userID);
user.getUserID();//如果不执行此操作,Hibernate就不会抛出ObjectNotFoundException.
userDao.remove(user);
}
}

由于在配置时使用的是延迟加载,所以当去出user时并没有持久化,当我们对user进行set/get处理时才进行持久化,所以在此时抛出notfound异常.下面的异常是清楚的,我们删除一个并没有实例化的对象.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值