Hibernate Work

我们在用Hibernate session的delete 方法时候是不是感觉到,有时候想进行批量删除,而delete里面的参数是一个object,我们要进行批量时,首先我们可以对当前类进行一个实例,然后再把要删除的id设置给当前对象,这样hibernate就能根据这个id删除数据库中的数据了,但是这样写感觉写起来很不爽,另外在进行删除时,hibernate要将要删除的对象加载到缓存中去,最后在进行session清空,这样才把对象从数据库中删除,当数据少时没有啥子差别,但删除数据量很大时,那么其性能就不用说,所以我们在把批量删除时选择绕过hibernate session,而直接调用jdbc对数据库进行操作,大大提高效率。

Session session = HibernateUtil.currentSession();
  session.beginTransaction();
//  session.connection();
  session.doWork(new Work() {
   public void execute(Connection connection) throws SQLException {
    PreparedStatement ps = null;
    try {
     ps = connection.prepareStatement(sql);
     ps.executeUpdate();
    } catch (SQLException e) {
     throw new SQLException("批量更新发生异常");
    } finally {
     if (ps != null) {
      try {
       ps.close();
      } catch (Exception e) {

      }
     }
    }
   }
  });
  
  session.getTransaction().commit();

上面作法仍然要用hibernate事务作界限。其中//  session.connection();
该方法已经过期,在hibernate3.0版本中,改用上述方法进行调用,是用Java中内部类来实现的。

 

如果所选的数据库支持存储过程,那么用存储过程来进行调用可能得到效果更好,尤其是在性能上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值