hibernate为什么不能批量删除和更新? 10
我在一个人的文档中看到:Hibernate作为ORM,有一个ORM固有的问题,就是由于为了持久对象的同步,不能够使用批量删除和批量更新的sql,只能按照主键一条条来操作。...
我在一个人的文档中看到:
Hibernate作为ORM,有一个ORM固有的问题,就是由于为了持久对象的同步,不能够使用批量删除和批量更新的sql,只能按照主键一条条来操作。
这是为什么?它是怎么保持持久对象的同步的? 展开
Hibernate作为ORM,有一个ORM固有的问题,就是由于为了持久对象的同步,不能够使用批量删除和批量更新的sql,只能按照主键一条条来操作。
这是为什么?它是怎么保持持久对象的同步的? 展开
2个回答
展开全部
不知道你用的是什么版本的hibernate,我用3.2和更高的版本都支持批量更新,这是hibernate文档中的描述
15.4.DML(数据操作语言)风格的操作(DML-style operations)updarte例子
Session session = sessionFactory.openSession();Transaction tx = session.beginTransaction();String hqlVersionedUpdate = "update versioned Customer set name = :newName where name = :oldName";int updatedEntities = s.createQuery( hqlUpdate ) .setString( "newName", newName ) .setString( "oldName", oldName ) .executeUpdate();tx.commit();session.close();
注意:使用hql中的update 和 delete是不会影响session级缓存的,如果session.get(User.class,1),那么使用hql的delete(delete from User u where u.id=1),在session没有提交之前,再次使用session.get(User.class,1),正常来讲会报错,因为数据库的数据都删除了,不可能查出来,但是仍然会查出数据,因为session.get ,update,delete 首先访问的是session级别缓存。
15.4.DML(数据操作语言)风格的操作(DML-style operations)updarte例子
Session session = sessionFactory.openSession();Transaction tx = session.beginTransaction();String hqlVersionedUpdate = "update versioned Customer set name = :newName where name = :oldName";int updatedEntities = s.createQuery( hqlUpdate ) .setString( "newName", newName ) .setString( "oldName", oldName ) .executeUpdate();tx.commit();session.close();
注意:使用hql中的update 和 delete是不会影响session级缓存的,如果session.get(User.class,1),那么使用hql的delete(delete from User u where u.id=1),在session没有提交之前,再次使用session.get(User.class,1),正常来讲会报错,因为数据库的数据都删除了,不可能查出来,但是仍然会查出数据,因为session.get ,update,delete 首先访问的是session级别缓存。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询