【发布时间】:2010-08-16 10:50:36
【问题描述】:
在 Hibernate 中删除表中的所有行的最佳方法是什么?
如果我遍历一个集合并调用 session.delete(),据我所知,它并没有执行。
如果我使用另一个选项 session.createQuery("delete ...") 它不会影响持久性上下文。
如果没有更好的变体,我什么时候应该使用这些方法?
【问题讨论】:
标签: java hibernate sql-delete
在 Hibernate 中删除表中的所有行的最佳方法是什么?
如果我遍历一个集合并调用 session.delete(),据我所知,它并没有执行。
如果我使用另一个选项 session.createQuery("delete ...") 它不会影响持久性上下文。
如果没有更好的变体,我什么时候应该使用这些方法?
【问题讨论】:
标签: java hibernate sql-delete
DELETE FROM enityName
问题在于hibernate在内部处理级联,而不是将其留给数据库。因此发送查询不会触发内部级联,因此您将遇到不一致/孤儿。
如果性能如此重要(毕竟不是每天都会截断一个表),那么您可以为每个级联删除 1 个以上的 HQL - 即手动处理级联。
【讨论】:
您可以使用 HQL 截断表格
public int hqlTruncate(String myTable){
String hql = String.format("delete from %s",myTable);
Query query = session.createQuery(hql)
return query.executeUpdate();
}
【讨论】:
String stringQuery = "DELETE FROM tablename";
Query query = session.createQuery(stringQuery);
query.executeUpdate();
【讨论】: