36

在 Hibernate 中删除表中所有行的最佳方法是什么?

如果我遍历一个集合并称它为session.delete()我所知的不执行。

如果我使用另一个选项session.createQuery("delete ..."),它不会影响持久性上下文。

如果没有更好的变体,我什么时候应该使用这些方法?

4

3 回答 3

27

您可以使用 HQL 截断表

public int hqlTruncate(String myTable){
    String hql = String.format("delete from %s",myTable);
    Query query = session.createQuery(hql)
    return query.executeUpdate();
}
于 2010-08-16T11:02:03.487 回答
26
  • 如果您没有要级联的内容,请使用 HQL 删除DELETE FROM enityName
  • 如果您有级联,请迭代集合并单独删除每个集合。

问题在于hibernate在内部处理级联,而不是把它留给数据库。因此发送查询不会触发内部级联,因此您将遇到不一致/孤儿。

如果性能如此重要(毕竟不是每天都会截断一个表),那么您可以为每个级联删除 1 个以上的 HQL - 即手动处理级联。

于 2010-08-16T11:16:41.893 回答
9
String stringQuery = "DELETE FROM tablename";
Query query = session.createQuery(stringQuery);
query.executeUpdate();
于 2010-08-16T11:01:18.093 回答