HIbernate 大批量数据处理

本文介绍如何使用HQL进行批量更新和插入数据的操作方法,并提供具体的代码实现案例。

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

节 1.01   HQL 更新 / 删除大批量数据

Transaction transaction = session .beginTransaction();

String hql = "UPDATE UserInfo user set user.username=:username,user.password=:password" ;

Query query = session .createQuery(hql);

query.setString(paramsName[0], paramsValue [0]);

query.executeUpdate();

transaction.commit();

注:使用 HQL 处理大批量数据会直接执行 DML 语句,从而绕过 Hibernate 的上下文和所有高速缓存。

节 1.02   HQL 创建大批量数据

Query q = session.createQuery( "INSERT INTO LostCreditCard(type,number) SELECT c.type,c.number FROM CreditCard c join c.user u" );

int createdObjects = q.executeUpdate();

 

节 1.03   批量更新数据

Hibernate.xml 文件中添加以下内容

< property name = "hibernate.jdbc.batch_size" > 20 </ property >

 

Session session = sessionFactroy.openSession();

Transaction tx = session.beginTransaction();

Query query = session.createQuery()

ScrollableResults cursor = query.scroll( "FROM SettleEnterRecord" ).scroll();

int count = 0;

while (cursor.next()) {

    SettleEnterRecord record = (SettleEnterRecord) cursor.get(0);

record.setIsValid( "2" );

if (++count % 100 == 0) {

              session.flush();

              session.clear();

           }

       }

tx.commit();

session.close();

节 1.04   批量插入数据

Session session = sessionFactroy.openSession();

Transaction tx = session.beginTransaction();

for ( int i = 0 ; i < 100000; i ++){

              Item item = new Item ();

              session.save(item);

              if (i%100 == 0){

                  session.flush ();

                  session.clear ();

              }

           }

tx.commit();

session.close ();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值