我想實現deleteAll
方法,它將刪除所有User
實體與它們的關聯,同時我想在訪存內存堆中的用戶集合時阻止java.lang.OutOfMemoryError
異常。休眠:一次刪除關聯的所有實體
我目前的執行情況看起來像下面的代碼片段:
public void deleteAll() {
final int PAGE_SIZE = 15;
final int PAGE_NUMBER = 0;
final String SORTING_PROPERTY_NAME = "id";
List<User> result;
Session session = sessionFactory.getCurrentSession();
Criteria criteria = session.createCriteria(User.class);
criteria.addOrder(Order.asc(SORTING_PROPERTY_NAME));
criteria.setFirstResult(PAGE_NUMBER);
criteria.setMaxResults(PAGE_SIZE);
do {
result = criteria.list();
result.forEach(session::delete);
} while (result.size() == PAGE_SIZE);
}
正如你看到我使用分頁的方式,所以我取一個批量數據然後將其刪除等。 Hibernate在現實中如何實現這一點?謝謝你的幫助。
看看:http://stackoverflow.com/questions/3492453/hibernate-and-delete-all。可能有幫助。目前的方法看起來效率很低,你必須讀取整個表,然後刪除每條記錄,太多的數據庫查詢。 –