hibernate3.0的批量更新

本文介绍了一个Hibernate 3.0批量更新的应用案例,针对一个具体的业务场景,通过使用HQL进行批量更新操作,并分享了实践中遇到的问题及解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hibernate3.0的一个重要更新就是增加了批量更新和批量删除的功能。
官方文档给了个例子:
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
String hqlUpdate = "update Customer set name = :newName where name = :oldName";
int updatedEntities = s.createQuery( hqlUpdate )
.setString( "newName", newName )
.setString( "oldName", oldName )
.executeUpdate();
tx.commit();
session.close();

而在我的一个应用中,需要更新的列刚好是一个表的外键
使用对象的属性来设置where条件总是出错,
而选择使用表的列名来设置where条件却可以了
(更新的列和判断条件的列是同一个)

    boolean success = true;
    Session session = ThreadLocalSession.getCurrentSession();
    try {
      ThreadLocalSession.beginTransaction();
     
      StringBuffer hql = new StringBuffer("update com.xxx.MyClass set fkProperty=:newValue where fk_id");
      if(pOld == null) {
        hql.append(" is null");
      } else {
        hql.append("=:oldValueId");
      }
     
      Query query = session.createQuery(hql.toString());
      query.setParameter("newValue", pNew);     
      if(pOld != null) {
        query.setParameter("oldValueId", pOld.getId());
      }
     
      query.executeUpdate();
    } catch(Exception e) {
      success = false;
      e.printStackTrace();
    } finally {
      ThreadLocalSession.endTransaction(success);
    }

不知道是我表的设置问题,还是hibernate3.0对批量更新的支持问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值