Hibernate3中可以提供DML风格的操作(hql)这样如果我们直接用DML风格写hql进行批量数据修改的直接操作势必会大大提高效率比起session.update(obj)这样针对PO的操作要快了很多,现在出现的问题是当我如果直接进行了HQL操作见代码:
Query query = session.createQuery("update Test set name = name||id where id>0");
query.executeUpdate();
则没有办法进行Test这个对象的version(在数据库中我加了version字段用于乐观锁机制)进行一个有效的更新,这样造成的结果就是在我进行批量更新的时候另外一个事务并发访问了这个数据依然是可以进行更改,到最后会出现脏数据库,这样就数据安全性来讲是肯定不行的,所以我查找Hibernate Reference中关于批量部分的内容给出的答案是进行versioned关键字的添加来强制进行version同步,内容如下:
引用
HQL UPDATE statements, by default do not effect the Section 5.1.7, “version (optional)” or the Section 5.1.8, “timestamp (optional)” property values for the affected entities; this is in keeping with the EJB3 specification. However, you can force Hibernate to properly reset the version or timestamp property values through the use of a versioned update. This is achieved by adding the VERSIONED keyword after the UPDATE keyword.
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();
这样我在我的代码中加了versioned关键字:
Query query = session.createQuery("update versioned Test set name = name||id where id>0");
query.executeUpdate();
但系统会抛出异常为不合法的语句,不清楚问题出在哪里,请大家看看,而且这样进行批处理的一个操作当其中有数据库正在修改的时候version已经改变变了会不会在批处理进行提交时候抛出异常也就是说在批处理的时候乐观锁是否依然可以生效!
分享到:
相关推荐
《3DML开源说明书-v1.0.11》详细解析 3DML,全称为三维标记语言(Three Dimensional Markup Language),是由泰瑞数创科技(北京)有限公司开发的一种专为传输和浏览大规模3D空间数据而设计的格式。该格式基于开源...
同时介绍了StatelessSession和Hibernate查询语言(HQL)用于DML操作。 ### 锁机制 Hibernate中的锁机制用来管理并发事务,以确保数据的一致性。文档详细讲解了乐观锁和悲观锁的实现,包括版本号和时间戳机制。 ###...
批量删除或更新操作可以通过HQL(Hibernate Query Language)实现,这是一种类似于SQL的语言,专门用于Hibernate框架的数据操作。使用HQL可以更灵活地构建复杂的查询和更新语句,提高数据处理效率。 ### 4. ...
在数据库管理中,批量操作是常见的优化策略,特别是在大数据量的场景下,它可以显著提高效率并减少资源消耗。批量更新、删除和插入是这类操作的关键组成部分。标题中的“批量更新删除插入SOURCEDATA.dml_task.zip_...
4. **持久化操作**:使用Session的`save()`, `update()`, `delete()` 和 `get()` 方法进行CRUD操作,或者使用`createQuery()`或`createCriteria()`执行HQL(Hibernate Query Language)查询。 5. **事务处理**:...
9.4.3 通过HQL来进行批量操作 9.4.4 直接通过JDBC API来进行批量操作 9.5 使用元数据 9.6 通过Hibernate调用存储过程 9.7 小结 9.8 思考题 第10章 映射组成关系 10.1 建立精粒度对象模型 10.2 建立...
同时,DML 语句也可以对数据库中的数据进行批量操作,提高工作效率和生产力。 在学习 Oracle 操作数据 DML 语句时,需要了解其基本语法和应用场景,包括插入、更新和删除数据的语法和示例。 1. 插入数据(INSERT...
在数据库管理领域,数据操纵语言(Data Manipulation Language,简称DML)是SQL语言中用于操作数据的关键组成部分,包括插入(INSERT)、更新(UPDATE)、删除(DELETE)等语句。然而,在传统观念中,SELECT语句主要...
此外,Hibernate Query Language(HQL)也得到了增强,特别是在 DML 方面,支持了 UPDATE 和 DELETE 操作的 HQL 语法,以及 IN 子句的使用,这些都极大地丰富了数据操作的表达力。 #### 结论 综上所述,Hibernate ...
在Oracle数据库中,如何查找,定位一张表最后一次的DML操作的时间呢? 方式有三种,不过都有一些局限性,下面简单的解析、总结一下。 1:使用ORA_ROWSCN伪列获取表最后的DML时间 ORA_ROWSCN伪列是Oracle 10g开始...
9.4.3 通过HQL来进行批量操作 9.4.4 直接通过JDBC API来进行批量操作 9.5 使用元数据 9.6 通过Hibernate调用存储过程 9.7 小结 9.8 思考题 第10章 映射组成关系 10.1 建立精粒度对象模型 10.2 建立...
- **DML 风格操作**:展示如何使用类似 DML 的风格执行批量操作。 #### 十六、HQL:Hibernate 查询语言 - **大小写敏感性**:解释 HQL 是否区分大小写。 - **from 子句**:介绍如何使用 from 子句指定查询的起点。 ...
瀚高数据库Hibernate方言是针对瀚高数据库(HighGo Database)设计的一种特定的方言实现,用于在Java应用程序中通过Hibernate框架与瀚高数据库进行交互。Hibernate是一个流行的对象关系映射(ORM)工具,它允许开发者...
3. **hibernate.jdbc.batch_versioned_data**:当开启时,Hibernate会为自动版本化的数据使用批量DML操作,以提高性能。 4. **hibernate.jdbc.factory_class**:允许自定义Batcher实现,但大多数情况下无需更改默认...
6. **011_Hibernate_DML**: DML(Data Manipulation Language)操作包括插入、更新和删除数据库记录。这部分可能包含了使用Hibernate执行DML操作的示例。 7. **013_Struts_Hibernate**: Struts是一个流行的MVC框架...
在这个“hive 表 DML 操作.zip”压缩包中,我们关注的是Hive对数据操作的语言特性,特别是DML(Data Manipulation Language),即数据操纵语言。在Hive中,DML主要包括INSERT、UPDATE、DELETE以及SELECT等操作,但...
这篇实验报告主要涉及了数据库管理系统的数据操作,包括DML(Data Manipulation Language)的三大基本操作:UPDATE、DELETE和INSERT。这些操作是数据库管理中不可或缺的部分,用于更新、删除和添加数据记录。 1. ...