我可以在java hibernate中找到批处理的例子,这样我就可以在两个表上运行删除查询。
答案 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,删除一个 实际上可能会产生子类 不仅仅删除表格 该子类被映射到哪个,但是 也是“根”表和潜在的 进一步向下加入子类表 继承层次结构。
我不确定的含义是什么,以便我可以在两个表上运行删除查询。请记住,正如文档所述,批量操作不会级联。