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映射方式的子类
的表。
分享到:
相关推荐
使用Hibernate将大量记录插入到数据库
版本差异太难搞了,找半天才找到错误,主要是包冲突 NoSuchMethodError: org.jboss....NoClassDefFoundError: org/hibernate/cache/spi/RegionFactory org.hibernate.cache.spi.RegionFactory 记录下来,以备不时
java/hibernate/css/jquery spring api 方便学习
hibernate所有必须的包 一个很好的ppt教程以及hibernate多种查询方法
Java Hibernate3 添加和删除数据实例,供大家一起共同分享学习。
于是我花了几天时间搭建出来的hibernate+springmvc的框架,这个框架去除hibernate配置, 将配置全部整合到spring中,开发中使用注解开发即可,很方便,以后我还会持续更新的。 这是一个maven项目,放在eclipse中,改...
配置Hibernate使用c3p0或Proxool连接池(2008-01-13 17:15:54)转载标签: 杂谈 1.Hibernate默认连接池 <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//...
<property name="hibernate.hbm2ddl.auto">update</property> <!-- 配置C3P0的连接池 --> <property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> ...
hibernate api+hibernate文档都是chm格式,绝对可用!
hibernate-annotations-3.4.0.GA.zip ; hibernate-distribution-3.3.2.GA-dist.zip ; slf4j-1.5.8.zip; 尚学堂马士兵的hibernate3.32教学视频用到插件;学习hibernation必备工具包
hibernate手册专业版中山大学图书馆资料扫描版
本程序是struts spring hibernate的完整环境配置, 包括: struts1.3 spring 2.0 hibernate 3.1 的所有完整的包。 BeanNameAutoProxyCreator事务处理 中文乱码解决 MD5程序加密 AJAX验证码等 ...
Hibernate Eclipse C/S开发实例源代码 SWT
http://sourceforge.net/projects/hibernate/files/hibernate3/--3.XX版本 http://sourceforge.net/projects/hibernate/files/hibernate4/--4.XX版本 IBATS下载地址:...
很多人都对Java在批量数据的处理方面是否是其合适的场所持有怀疑的念头,由此延伸,...下面以Hibernate为例来做为说明,假如我们真的不得不在Java中使用Hibernate来对数据进行批量处理的话。 向数据库插入100 000条数据
13.3. 大批量更新/删除(Bulk update/delete) 14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. select子句 14.5. 聚集函数 14.6. 多态查询 14.7. ...
在Hibernate中处理批量更新和批量删除
spring-hibernate3.jar //3 spring-jdbc.jar //3 spring-web-2.5.6.jar //1 struts2-core-2.1.6.jar //2 struts2-convention-plugin-2.1.6.jar //2* struts2-spring-plugin-2.1.6.jar //1 xwork-2.1.2.jar //2 ...
Select/update/delete……from……where……groupby……having……orderby……asc/desc 其中的update/delete为Hibernate3中所新添加的功能,可见HQL查询非常类似于标准SQL查询。
* HIBERNATE_HOME/lib/hibernate3.jar * MySql JDBC驱动 3、提供hibernate.cfg.xml文件 4、定义实体 5、定义User实体类的映射文件User.hbm.xml 6、将User.hbml.xml文件加入到hibernate.cfg.xml文件中 7、...