休眠并删除所有

fei*_*oox 33 java hibernate sql-delete

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

如果我迭代一个集合并称session.delete()它不符合我的知识.

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

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

Dam*_*ash 24

您可以将HQL用于truncate table

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

  • 您必须在查询而不是表中写入java类文件的名称. (9认同)
  • 这不是截断. (5认同)
  • 不级联删除,因此可能违反fk约束. (4认同)

Boz*_*zho 24

  • 如果您没有任何要级联的内容,请使用HQL删除 DELETE FROM enityName
  • 如果您有级联,请迭代集合并单独删除每个集合.

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

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


the*_*ost 6

String stringQuery = "DELETE FROM tablename";
Query query = session.createQuery(stringQuery);
query.executeUpdate();
Run Code Online (Sandbox Code Playgroud)

  • @feiroox:它更好,因为当你迭代Collection并调用delete时,它会删除一行和一行.这是一个很大的性能问题.然而,就像Bozho所说,如果你有级联,你可能想要这样做. (3认同)