我想实现 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 实现的?感谢您的帮助。
最佳答案
试试这个:
sessionFactory.getCurrentSession().createQuery("delete from User").executeUpdate();
您无需获取所有记录(或任何部分)即可删除它们。 也看here .也许它会有用。
不幸的是,这种方法不会触发级联移除。也许你可以批准另一种方法。例如,创建附加列“is_deleted”并在删除时将值设置为 true。在此之后,您可以在晚上安排工作。这项工作实际上将通过您的方法删除这些用户的一部分。但是您必须向 get\fetch 方法添加一个条件,以仅考虑 is_deleted=false 用户。
关于java - Hibernate:一次删除所有具有关联的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38686841/