hibernate批量删除和更新数据

在树莓派上部署训练好的YOLO模型 .pt.模型转换为onnx格式的模型,树莓派上部署模型 阅读详情

转载自:http://blog.csdn.net/yuhua3272004/article/details/2909538

Hibernate3.0 采用新的基于ANTLR的HQL/SQL查询翻译器,在Hibernate的配置文件中,hibernate.query.factory_class属性用来选择查询翻译器。
(1)选择Hibernate3.0的查询翻译器:
hibernate.query.factory_class= org.hibernate.hql.ast.ASTQueryTranslatorFactory
(2)选择Hibernate2.1的查询翻译器
hibernate.query.factory_class= org.hibernate.hql.classic.ClassicQueryTranslatorFactory
为了使用3.0的批量更新和删除功能,只能选择(1)否则不能解释批量更新的语句。选择(2)但没法解释批量更新语句了。

大批量更新/删除(Bulk update/delete)

就像已经讨论的那样,自动和透明的 对象/关系 映射(object/relational mapping)关注于管理对象的状态。 这就意味着对象的状态存在于内存,因此直接更新或者删除 (使用 SQL 语句 UPDATE 和 DELETE) 数据库中的数据将不会影响内存中的对象状态和对象数据。 不过,Hibernate提供通过Hibernate查询语言来执行大批 量SQL风格的(UPDATE)和(DELETE) 语句的方法。

UPDATE 和 DELETE语句的语法为: ( UPDATE | DELETE ) FROM? ClassName (WHERE WHERE_CONDITIONS)?。 有几点说明:

在FROM子句(from-clause)中,FROM关键字是可选的

在FROM子句(from-clause)中只能有一个类名,并且它不能有别名

不能在大批量HQL语句中使用连接(显式或者隐式的都不行)。不过在WHERE子句中可以使用子查询。

整个WHERE子句是可选的。

举个例子,使用Query.executeUpdate()方法执行一个HQL UPDATE语句: 

 

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();


执行一个HQL DELETE,同样使用 Query.executeUpdate() 方法 (此方法是为 那些熟悉JDBC PreparedStatement.executeUpdate() 的人们而设定的)

 

Session session = sessionFactory.openSession();

Transaction tx = session.beginTransaction();

String hqlDelete = "delete Customer where name = :oldName";

int deletedEntities = s.createQuery( hqlDelete ) .setString( "oldName", oldName ) .executeUpdate();

tx.commit();

 session.close();


由Query.executeUpdate()方法返回的整型值表明了受此操作影响的记录数量。 注意这个数值可能与数据库中被(最后一条SQL语句)影响了的“行”数有关,也可能没有。一个大批量HQL操作可能导致多条实际的SQL语句被执行, 举个例子,对joined-subclass映射方式的类进行的此类操作。这个返回值代表了实际被语句影响了的记录数量。在那个joined-subclass的例子中, 对一个子类的删除实际上可能不仅仅会删除子类映射到的表而且会影响“根”表,还有可能影响与之有继承关系的joined-subclass映射方式的子类的表。

 

------------------------------------------------------------------------------------------------

 

我在 spring + hibernate 中 使用

String sql = "delete PlanPackageRelations  where ppfId = "+ppfId;
int a = this.getHibernateTemplate().getSessionFactory().openSession().createQuery(sql).executeUpdate();
结果控制台输出一下信息: 

在本地事务包含边界中使用的资源 jdbc/cnas 的可分享连接 MCWrapper id 19911991  Managed connectioncom.ibm.ws.rsadapter.spi.WSRdbManagedConnectionImpl@12781278 State:STATE_TRAN_WRAPPER_INUSE

 

-------------------------------------------------------------------------------------------------

 

调用jdbc 处理根据非主键删除。

/**
  * 根据ppfId ,删除PlanPackageRelations。
  * @param ppfId
  */
 public  void deletePlanPackageRelations(String ppfId){
     final String ppfIdFinal = ppfId;
     try {
     
         this.getHibernateTemplate().execute(new HibernateCallback(){
               public Object doInHibernate(Session session) throws HibernateException, SQLException {
                List result = new ArrayList();
                String sql = "delete PlanPackageRelations  where ppfId = :ppfId";
                Query query = session.createQuery(sql).setString("ppfId",ppfIdFinal);
                result.add(new Integer(query.executeUpdate()));
                return result;
               }
               
         });
         
//         String sql = "delete PlanPackageRelations  where ppfId = "+ppfId;
//         int a = this.getHibernateTemplate().getSessionFactory().openSession().createQuery(sql).executeUpdate();
//         
         
        }catch(DataAccessException t){
   t.printStackTrace();
   throw t;
  }catch (Exception e) {
      e.printStackTrace();   
        }
 }

 --------------------------------------------------------------------------------------------

 

使用HibernateTemplate批量删除数据

  使用spring + hibernate框架中,一般使用hibernateTemplate来使用Hibernate,但hibernateTemplate
的 bulkUpdate()不能实现动态的批量删除,即使用bulkUplate时要事先确定下占位符”?“的个数,然后再使用其重载方法 bulkUpdate(queryString, Object[]),此时,Object[]内的元素个数就要跟queryString中的占位符“?”的个数相等,使用十分麻烦,因此可以使用 HibernateCallback回调函数来进行动态批量删除,即可以不考虑要删除元素的个数。具体使用方法如下例:
    public void bulkDelete(final Object[] ids) throws Exception {
        final String queryString = "delete PersistentModel where id in (:ids) ";
        super.execute(new HibernateCallback() {
            public Object doInHibernate(Session session) throws HibernateException, SQLException {
                Query query = session.createQuery(queryString);
                query.setParameterList("ids", ids);
                return query.executeUpdate();
            }
        });
    }
注:标红处的占位符要加上(),否则会抛出语法错误异常。

 

-----------------------------------------------------------------------------------------

bulkUpdate 使用:

 

String updateSql = "update Rsceref ref set ref.rulecode = ? where ref.rscerefcode = ?";
getHibernateTemplate().bulkUpdate(updateSql, new Object[]{chkObj.getBmcrcode(),listExistRuleSql.get(0)}); 

 

this.getHibernateTemplate().bulkUpdate(sql);


用Linkboy玩转Arduino:3小时搞定智能倒车雷达(附仿真文件下载) 本文详细介绍了如何利用Linkboy图形化编程工具,在3小时内快速搭建一个基于Arduino的智能倒车雷达项目。通过仿真环境,初学者无需硬件即可学习超声波测距原理、报警逻辑设计,并完成从虚拟仿真到实体硬件的完整流程。文章提供了清晰的步骤、调试技巧及功能扩展思路,并附有仿真文件,是入门Arduino智能硬件制作的绝佳实践指南。 阅读详情

相关推荐

BitLocker加密盘解密实战:从隐藏分区到密钥恢复的全过程

本文深入探讨了BitLocker加密盘在密钥丢失或遗忘情况下的解密实战方法。文章系统性地介绍了从理解加密机制、制作取证镜像,到深度扫描隐藏分区、分析内存转储寻找密钥残留,最终利用恢复密钥解锁加密卷的全过程。重点剖析了非标准恢复路径,为数据恢复数字取证工作提供了专业的技术框架实战思路。

weixin_29268385的博客 265

hibernate3 批量更新删除数据

Hibernate3.0 采用新的基于ANTLR的HQL/SQL查询翻译器,在Hibernate的配置文件中,hibernate.query.factory_class属性用来选择查询翻译器。(1)选择Hibernate3.0的查询翻译器:hibernate.query.factory_class= org.hibernate.hql.ast.ASTQueryTranslatorFactory(2

小樓東風的专栏 7360

告别安装烦恼!Orange3 3.38.0 Windows绿色版下载即用,附保姆级汉化与组件配置指南

本文详细介绍了Orange3 3.38.0 Windows绿色版的下载与使用,包括中文汉化、组件配置及高效管理技巧。这款无需安装的数据科学工具特别适合快速验证想法的研究人员移动办公用户,支持多种数据可视化工具,大幅提升工作效率。

weixin_30897233的博客 523

Hibernate 批量更新删除

Hibernate2中,对于批量更新操作,Hibernate是将符合要求的数据查出来,然后再做更新操作。批量删除也是这样,先把符合条件的数据查出来,然后再做删除操作。     这样有两个大缺点:     (1):占用大量的内存。     (2):处理海量数据的时候,执行update/delete语句就是海量了,而且一条update/delete语句只能操作一个对象,这样频繁的操作数据库,性能

技术改变生活,生活改变思想,思想改变技术。 1953

关于hibernate3 中bulk delete/update与缓存同步问题

小弟最近刚学hibernate,看的是深入浅出hibernate一书。里面碰到一些关于缓存的问题。 建了个简单的表测试 User 里面的字段只有 id name 其中操作User类中(OperatorUser类)有个删除User的方法获取User的方法如下 //删除User [code="java"]public void deleteUser(St...

前进的步伐 257

hibetnateTemplate常用方法

1、delete(Object entity) 删除指定的持久化实例 在程序中一般先用 Assert.notNull Assert.isTrue断言entity是否为空 entity的id是否大于0若 否则事务回滚。再用get(Class entityClass,Serializable id,LockMode lockMode)加锁查询出持久 化实例,一般用lockMode.upda

a243932069的专栏 895

Hibernate技术

Hibernate技术不懂技术的人或者技术新手往往容易被“框架”二字所唬住,所谓框架是前人对相关问题处理方案的总结,将对某类问题最有价值的解决方式汇集在一起,形成框架。其它人使用时,仅仅只需要按照框架缔结者设定的规则以及调用的API,来完成对框架的使用。学习hibernate,学习的主要是hibernate的使用规则,理解这个框架的思想。1、Configuration、SessionF

菜菜鸟_黑马的专栏 1310

Hibernate 数据批量插入、更新删除

4.2  Hibernate批量处理 hibernate完全以面向对象的方式来操作数据库,当程序里以面向对象的方式操作持久化对象时,将被自动转换为对数据库的操作。例如调用Sessiondelete()方法来删除持久化对象,Hibernate将负责删除对应的数据记录;当执行持久化对象的set方法时,Hibernate将自动转换为对应的update方法,修改数据库的对应记录。 问题是如果需要同

日立昱的博客 482

Hibernate 数据批量插入 更新删除

Hibernate 数据批量插入 更新删除

qq_44894516的博客 544

java hibernate批量更新_hibernate批量更新删除数据

批量处理不建议用Hibernate,它的insert效率实在不搞,不过最新版本的Hibernate似乎已经在批量处理的时候做过优化了,设置一些参数如batch_size,不过性能我没有测试过,听说是这样。我记得以前在做大批量数据转移的时候我们测试过Hibernate,很慢,直接Pass,当时我们的系统由于用多个数据库,所以用的jdbc,如果不考虑移植还是可以用存储过程的。存储过程对数据库依赖过强...

weixin_31659249的博客 712

hibernateTemplate与数据库的交互

先前的hibernatesessionhibernateTemplate区别是 session是对单个的save(),update()没有事务处理的,而hibernateTemplate里的save(),saveOrUpdate(),update()都是有事务处理的。 sessionhibernate原生态的操作, hibernateTemplate是spring对hibernate

ryan1214的专栏 1346

HibernateTemplate 方法

get()与load()方法区别 hibernate中get方法load方法的根本区别 如果你使用load方法,hibernate认为该id对应的对象(数据库记录)在数据库中是一定存在的,所以它可以放心的使用,它可以放心的使用代理来延迟加载该对象。在用到对象中的其他属性数据时才查询数据库,但是万一数据库中不存在该记录,那没办法,只能抛异常ObjectNotFoundException,所说的

Developer of XingKong22star 870

Hibernate批量更新删除(&&JDBC)

一,批量更新(两种方式) 1,使用Hibernate直接进行批量更新 (1)方式1:(Hibernate的HQL直接支持update/delete批量更新语法) package com.anlw.util; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionF

浅浅请留步 1万+

java hibernate批量更新_Hibernate批量处理海量数据的方法

本文实例讲述了Hibernate批量处理海量数据的方法。分享给大家供大家参考,具体如下:Hibernate批量处理海量其实从性能上考虑,它是很不可取的,浪费了很大的内存。从它的机制上讲,Hibernate它是先把符合条件的数据查出来,放到内存当中,然后再进行操作。实际使用下来性能非常不理想,在笔者的实际使用中采用下面的第三种优化方案的数据是:100000条数据插入数据库, 需要约30分钟,呵呵,晕...

weixin_42116585的博客 1599

django bulk_update_or_create 批量创建更新

当前django并没有提供能够批量创建或更新的方法,只有以及,在实际业务中并不能满足我们的需求。因此才会有了。

wmjf1的博客 3248

hibernate 更新数据的几种方式

方式一: 使用hibernate的缓存快照机制, hibernate 向一级缓存放入数据时,同时保存快照数据 ( 数据库备份 ) ,当修改一级缓存数据,在 flush 操作时,对比缓存快照,如果不一致,自动更新 ( 将缓存的内容同步到数据库,更新快照 ). /** 2. * 测试快照区的使用 3. */ 4. @Test 5. public voi...

Dug_Zhang的博客 3134

1990-2023年中国30米分辨率年耕地空间分布-TIF格式+可编辑mxd文件

本资源为中国地区、时间跨度为1990—2023年的高精度耕地空间分布数据,空间分辨率达30米,数据格式为标准TIF。数据构建依托于Google Earth Engine(GEE)云平台的强大算力,综合利用Landsat 5 TM、Landsat 7 ETM+、Landsat 8 OLI以及Landsat 9 OLI-2等多源卫星的长期地表反射率观测数据。同时结合SRTM DEM地形数据与ESA CCI全球土地覆盖产品等多种辅助资料,对分类结果进行了精度提升与一致性优化。在特征提取阶段,针对各年份构建了生长季复合影像,提取了光谱指数、纹理特征及物候参数等多维特征集。分类过程中采用了基于GEE平台的随机森林算法,对像元进行逐点识别判别。通过人工解译与多源土地利用产品的交叉验证,构建了覆盖全国农业区的高置信度训练样本集。最终,经由时序一致性约束与空间平滑滤波处理,有效抑制了云、阴影等干扰因素,使数据在时间维度上保持连续与稳定。数据采用WGS84地理坐标系,像元值定义清晰:值为1表示耕地,值为0表示非耕地。耕地是国家粮食安全与生态稳定的关键基础,也是监测土地利用变化与农业可持续发展的重要依据。该数据集在长期序列与高空间精度上的优势,使其可广泛应用于土地变化分析、农业资源评估及政策制定等多领域研究。由于数据量过大(超12G),因此在上传文件夹中仅附带2023年数据,其余年份数据可通过附带的百度网盘下载链接自行下载。资源中包含可编辑mxd文件,方便用户根据自身做图喜好随意修改;包含的标准成图TIF格式,用户可直接拿来使用;还包括中国省级行政区划标准shape文件,方便用户根据实际需要裁剪各省级耕地信息。打开mxd文件前,要解压所有压缩文件夹。整理本资源花费了较多时间,如遇问题,请随时联系博主本人:一ge科研小菜菜。资源上传日期:2025年10月27日。

tj.rar_GM权限_天骄管理工具

一键启动等等噶权限等级注解测试结果说明r6注册GM权限不加参数,直接注册为最高权限;说明中仍然是register <密

上一篇: 解决hibernate向mysql插入中文乱码问题
下一篇: Javascript和CSS浏览器兼容总结
Peditable
博客等级 码龄16年 11粉丝 47原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值