Hibernate3中的更新与删除
作者:admin 日期:2008-10-07
Update 和 Delete语句的语法为:
( Update | Delete ) FROM ? ClassName (Where Where_CONDITIONS) ?。 有几点说明:
1.在FROM子句(from-clause)中,FROM关键字是可选的
2.在FROM子句(from-clause)中只能有一个类名,并且它不能有别名
3.不能在大批量HQL语句中使用连接(显式或隐式都不行)。不过在Where子句中可以使用子查询。
4.整个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映射方式的子类的表。
注意,上述大批量HQL操作的少数限制会在新版本中得到改进;进一步详细信息请参考JIRA里的路线图(roadmap)。
'引用自http://hi.baidu.com/webidea/blog/item/c07f60c794be4ddad000605e.html
( Update | Delete ) FROM ? ClassName (Where Where_CONDITIONS) ?。 有几点说明:
1.在FROM子句(from-clause)中,FROM关键字是可选的
2.在FROM子句(from-clause)中只能有一个类名,并且它不能有别名
3.不能在大批量HQL语句中使用连接(显式或隐式都不行)。不过在Where子句中可以使用子查询。
4.整个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映射方式的子类的表。
注意,上述大批量HQL操作的少数限制会在新版本中得到改进;进一步详细信息请参考JIRA里的路线图(roadmap)。
'引用自http://hi.baidu.com/webidea/blog/item/c07f60c794be4ddad000605e.html
评论: 0 | 引用: 0 | 查看次数: 2288
发表评论
你没有权限发表留言!