什麼是刪除休眠表中的所有行的最佳方式?休眠並全部刪除
如果我遍歷一個集合,並調用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