您希望批量删除表中数百万行以避免锁定。我正在尝试下面的代码,但它删除所有行。
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();
有没有更好的方法呢?
答案 0 :(得分:2)
我正在考虑" clazz.getSimpleName();"正在返回一个表名。
如果是这种情况,则查询是 - "从' tablename'"删除在这里,您没有指定任何限制删除语句的条件,这就是它从表中删除所有行的原因。
当你使用setFetchSize时 - setFetchSize(int value)是一个'提示'到驱动程序,告诉它应该获取多少行。
我认为在删除查询的情况下不需要此方法。