Привет, хочу удалить миллионы строк из таблицы в пакетном режиме, чтобы избежать блокировки. Я пытаюсь сделать код ниже, но его удаление всех строк.Hiberate удалять строки из таблицы с ограничением
Session session;
try {
session = dao.getHibernateTemplate().getSessionFactory().getCurrentSession();
} catch (HibernateException e) {
session = dao.getHibernateTemplate().getSessionFactory().openSession();
}
String sql = "delete from "+clazz.getSimpleName();
session.createQuery(sql).setFetchSize(limit).executeUpdate();
dao.getHibernateTemplate().flush();
Есть ли лучший способ сделать это
Да, я попробовал «удалить из tablename limit 100», но дает мне java.lang.IllegalArgumentException: узел для прохождения не может быть пустым! \t на org.hibernate.hql.ast.util.NodeTraverser.traverseDepthFirst (NodeTraverser.java:63) \t на org.hibernate.hql.ast.QueryTranslatorImpl.parse (QueryTranslatorImpl.java:280) \t в org.hibernate .hql.ast.QueryTranslatorImpl.doCompile (QueryTranslatorImpl.java:182) – plzdontkillme
старайтесь избегать setFetchsize (limit). Этот метод используется, чтобы указать, сколько строк вы хотите извлечь, но в вашем случае вы пытаетесь удалить строки, которые не извлекают их. – Moni
Спасибо Moni Я удалил эту часть, но есть ли способы указать количество строк для удаления? – plzdontkillme