在休眠中进行批处理的任何样本?

时间:2010-09-16 07:53:03

标签: hibernate persistence spring-batch batch-processing

我可以在java hibernate中找到批处理的例子,这样我就可以在两个表上运行删除查询。

2 个答案:

答案 0 :(得分:2)

查看Hibernate Reference的相关章节。

答案 1 :(得分:2)

该文档包含有关DML样式操作的章节:

  

13.4. DML-style operations

     

如前所述,自动和   透明对象/关系映射   关心的是管理   对象状态。对象状态是   在内存中可用。这意味着   直接操纵数据   数据库(使用SQL数据   操纵语言(DML)   语句:INSERT,UPDATE,DELETE)   不会影响内存状态。   但是,Hibernate提供了方法   用于批量SQL样式的DML语句   执行通过执行   Hibernate查询语言(HQL)。

     

UPDATE和的伪语法   DELETE语句是:( UPDATE | DELETE ) FROM? EntityName (WHERE where_conditions)?

     

需要注意的一些要点:

     
      
  • 在from子句中,FROM关键字是可选的
  •   
  • 在from子句中只能有一个实体。它可以,   但是,别名。如果是实体   name是别名,然后是任何属性   参考必须使用合格   别名。如果实体名称不是   别名,然后它是非法的   属性引用是合格的。
  •   可以在批量中指定
  • 无连接(隐式或显式)   HQL查询。可以使用子查询   where子句,子查询的位置   他们自己可能包含联接。
  •   
  • where子句也是可选的。
  •   
     

(...)

     

要执行HQL DELETE,请使用   相同的Query.executeUpdate()方法:

Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();

String hqlDelete = "delete Customer c where c.name = :oldName";
// or String hqlDelete = "delete Customer where name = :oldName";
int deletedEntities = s.createQuery( hqlDelete )
        .setString( "oldName", oldName )
        .executeUpdate();
tx.commit();
session.close();
     

返回的int值   Query.executeUpdate()方法   表示实体数量   受到手术的影响。这可能或   可能与数量无关   在数据库中影响的行。一个HQL   批量操作可能会导致   多个实际的SQL语句   执行(对于join-subclass,for   例)。返回的号码   表示实际的数量   受该声明影响的实体。   回到例子   join-subclass,删除一个   实际上可能会产生子类   不仅仅删除表格   该子类被映射到哪个,但是   也是“根”表和潜在的   进一步向下加入子类表   继承层次结构。

我不确定的含义是什么,以便我可以在两个表上运行删除查询。请记住,正如文档所述,批量操作不会级联。