Hibernate:一次删除所有具有关联的实体

时间:2016-07-31 17:50:56

标签: java hibernate orm

我想实现SetForegroundWindow()方法,它将删除所有bool _res = false; _res = AttachThreadInput(GetCurrentThreadId(), targetThreadID, TRUE); if (!_res) { cout << "Error: " << GetLastError() << endl; } else { //SetFocus(focusHandler); //SetActiveWindow(focusHandler); //SetForegroundWindow(focusHandler); enter code here if (!prevH) { cout << "Error: " << GetLastError() << endl; } else { UINT res = SendInput(nTotVKey, numInputVect, sizeof(INPUT)); if (res != nTotVKey) { cout << "Error: " << GetLastError() << endl; } else { _res = AttachThreadInput(GetCurrentThreadId(), targetThreadID, FALSE); if (!_res) { cout << "Error: " << GetLastError() << endl; } } } 个实体及其关联,同时我想在内存堆中获取用户集合时阻止deleteAll异常。

我当前的实现看起来像下面的代码段:

User

如您所见,我正在使用分页方法,因此我获取了大量数据,然后将其删除,依此类推。如何通过Hibernate实现这一目标?谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

试试这个:

sessionFactory.getCurrentSession().createQuery("delete from User").executeUpdate();

您不需要获取所有记录(或任何部分)来删除它们。 另请查看here。也许它会有用。

不幸的是,这种方法不会触发级联删除。也许你可以批准另一种方法。例如,创建附加列&#34; is_deleted&#34;如果删除它,则设置值为true。在此之后,您可以在晚上安排工作。这项工作将通过您的方法实际删除这些用户的一部分。但是,您必须为get \ fetch方法添加一个条件,以便仅考虑is_deleted = false用户。

答案 1 :(得分:1)

假设没有级联,您实际上可以使用hql或jpl来执行此操作。

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