Ich möchte deleteAll
Methode implementieren, die alle User
Entities mit ihren Zuordnungen gelöscht werden, gleichzeitig möchte ich verhindern, java.lang.OutOfMemoryError
Ausnahme beim Abrufen von Benutzer Sammlung im Speicher Heap.Hibernate: alle Entitäten mit Zuordnungen auf einmal löschen
Meine aktuelle Implementierung sieht aus wie der Code-Snippet:
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);
}
Wie Sie sehen, ich bin mit Paginierung Ansatz, damit ich einen Großteil der Daten geholt dann löschen und so weiter. Wie wird das in der Realität mit Hibernate erreicht? Danke für die Hilfe.
Werfen Sie einen Blick auf: http://stackoverflow.com/questions/3492453/hibernate-and-delete-all. Könnte hilfreich sein. Der aktuelle Ansatz sieht ziemlich ineffizient aus, Sie müssen die gesamte Tabelle lesen und dann jeden Datensatz löschen, zu viele DB-Abfragen. –