什么是删除休眠表中的所有行的最佳方式?休眠并全部删除
如果我遍历一个集合,并调用session.delete()
它不符合我的知识。
如果我使用其他选项session.createQuery("delete ...")
它不会影响持久性上下文。
当我应该使用这些方法,如果没有更好的变种?
什么是删除休眠表中的所有行的最佳方式?休眠并全部删除
如果我遍历一个集合,并调用session.delete()
它不符合我的知识。
如果我使用其他选项session.createQuery("delete ...")
它不会影响持久性上下文。
当我应该使用这些方法,如果没有更好的变种?
DELETE FROM enityName
问题在于,hibernate在内部处理级联,而不是将其留给数据库。因此,发送查询不会触发内部级联,因此您将有不一致/孤儿。
如果性能如此重要(毕竟不是每天都会截断表),那么每个级联可以有多个HQL删除 - 即手动处理级联。
String stringQuery = "DELETE FROM tablename";
Query query = session.createQuery(stringQuery);
query.executeUpdate();
您可以使用HQL用于截断表
public int hqlTruncate(String myTable){
String hql = String.format("delete from %s",myTable);
Query query = session.createQuery(hql)
return query.executeUpdate();
}
这是执行此操作的最佳方法 – 2010-08-16 11:18:04
您必须在查询不是表中编写java类文件的名称。 – 2013-04-25 10:43:08
不级联删除,因此可能违反fk约束。 – atamanroman 2014-02-03 12:19:59
为什么使用createQuery比迭代集合并调用session.delete()更好?我没有持久性上下文的问题吗? – feiroox 2010-08-16 11:03:42
比什么更好? – thelost 2010-08-16 11:04:56
@feiroox:最好是因为当你迭代Collection并调用delete时,它会删除一行和一行。这是一个很大的性能问题。然而,就像Bozho所说,如果你有瀑布,你可能会想这样做。 – 2010-08-16 11:20:06