从表中删除有限制的行
问题描述:
希望批量删除数百万行以避免锁定。我在下面的代码,但它删除所有的行。从表中删除有限制的行
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();
是否有这样做
答
我正在考虑什么更好的办法 “clazz.getSimpleName();”正在返回一个表名。
如果是这种情况,而不是您的查询 - “从表'中删除'”,您没有指定任何限制删除语句的条件,这就是为什么它会删除表中的所有行。
正如你所使用的setFetchSize - setFetchSize(int value)是驱动程序的'提示',告诉它应该读取多少行。
我觉得这个方法在删除查询的情况下是不需要的。
是的,我试过“从表名限制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 2014-10-02 22:02:48
尽量避免setFetchsize(limit)。此方法用于告知要提取多少行,但在您的情况下,您试图删除不提取它的行。 – Moni 2014-10-02 22:10:33
感谢Moni我删除了那部分,但有什么方法可以指定要删除的行数? – plzdontkillme 2014-10-02 23:08:06