休眠并全部删除

2022-09-01 04:27:45

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

如果我迭代一个集合并调用它,据我所知,它没有执行。session.delete()

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

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


答案 1

您可以使用 HQL 截断表

public int hqlTruncate(String myTable){
    String hql = String.format("delete from %s",myTable);
    Query query = session.createQuery(hql)
    return query.executeUpdate();
}

答案 2
  • 如果没有要级联的内容,请使用 HQL 删除DELETE FROM enityName
  • 如果有级联,请迭代集合并单独删除每个级联。

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

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


推荐