2014-10-02 10 views
-1

안녕하세요. 잠금 기능을 사용하지 않으려면 일괄 적으로 테이블에서 수백만 행을 삭제하고 싶습니다. 코드 아래에 노력하고 있지만 모든 행을 삭제합니다. "clazz.getSimpleName를();" 한계가있는 표에서 행을 삭제합니다.

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(); 

내가 고려하고

답변

2

을 그 일의 더 좋은 방법이 있나요 테이블 이름이 반환됩니다.

"delete tablename '"여기서 검색어는 delete 문을 제한하는 조건을 지정하지 않으므로 표에서 모든 행을 삭제하는 것입니다.

setFetchSize를 사용할 때 setFetchSize (int value)는 드라이버에게 '힌트'로 가져와야하는 행 수를 알려줍니다.

이 방법은 삭제 쿼리의 경우에는 필요하지 않다고 생각합니다.

+0

그래, "tablename 제한에서 100 삭제"시도했지만 java.lang.IllegalArgumentException 나를 준다 : 통과 할 노드 null이 될 수 없다! org.hibernate.hql.ast.util.NodeTraverser.traverseDepthFirst에서 \t (NodeTraverser.java:63) org.hibernate.hql.ast.QueryTranslatorImpl.parse에서 \t (QueryTranslatorImpl.java:280) org.hibernate에서 \t .hql.ast.QueryTranslatorImpl.doCompile (QueryTranslatorImpl.java:182) – plzdontkillme

+0

setFetchsize (제한)을 피하십시오. 이 메소드는 가져올 행 수를 알려주지 만, 사용자가 가져올 수없는 행을 삭제하려고 시도하는 경우에 사용됩니다. – Moni

+0

감사합니다 Moni 그 부분을 제거했지만 삭제할 행 수를 지정할 수있는 방법이 있습니까? – plzdontkillme

관련 문제