关于HIbernate批量删除

在做Hibernate开发的时候,会遇到删除大量数据的情况,一般情况下不建议使用"delete from..."的语句,调用executeUpdate方法进行直接删除,因为ORM Framework为了同步化已经缓存的持久化对象,必须根据主键来一条一条删除,这样框架才能知道删除了哪些数据,从而把这些数据从缓存中清理掉,如果使用批量删除的话则做不到这样,例如下面:

String hql = "delete from User u where u.name like 'test%'";
Query query = session.createQuery(hql);
query.executeUpdate();

// 如果现在有另外的session调用
anotherSession.load(User.class);
// 这个时候则会读取到已经被删除的数据,如果非要解决这个问题的话,那就相当于实现
// 了一个内存SQL数据库,但是对于轻量级ORM框架来说还是太过于复杂

不知道Hibernate现在的版本是否有解决这个问题,所以在使用hibernate做批量删除和做二级缓存的时候一定要谨慎,因为[color=violet]批量删除无法保证缓存数据的一致性[/color]。
数据的批量更新也是如此。
以上为个人总结,大部分来自于《深入浅出Hibernate》。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值