一条条删除的话,那我问的问题已经没有意义.
HQL有in操作吗?

解决方案 »

  1.   

    session.createQuery("delete t from id in (1,2,3)").executeUpdate();
      

  2.   

    Session session = HibernateUtil.currentSession();
    Transaction tx = session.beginTransaction();
    try {
         String range = "1,2,3,4";     
         session.createQuery("delete Flow from id in ("+ range +")").executeUpdate();
         tx.commit();

    catch (org.hibernate.HibernateException e) {
         tx.rollback();
         log.error(this.getClass().toString() + ":" + e.getMessage());

    finally {
        HibernateUtil.closeSession();
    }
    提交以后,报如下错
    java.lang.NoSuchMethodError: org.hibernate.hql.antlr.HqlBaseParser.recover(Lantlr/RecognitionException;Lantlr/collections/impl/BitSet;)V
    org.hibernate.hql.antlr.HqlBaseParser.optionalFromTokenFromClause(HqlBaseParser.java:400)
    org.hibernate.hql.antlr.HqlBaseParser.deleteStatement(HqlBaseParser.java:259)
    org.hibernate.hql.antlr.HqlBaseParser.statement(HqlBaseParser.java:148)
    org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:238)
    org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:155)
    org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:109)
    org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:75)
    org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:54)
    org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:71)
    org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:134)
    org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:113)
    org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1602)
    com.softbank.flow.FlowLogic.delFlows(FlowLogic.java:614)
    com.softbank.flow.FlowAction.execute(FlowAction.java:62)
    org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
    org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
    org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    com.softbank.common.LocalEncoding.doFilter(LocalEncoding.java:34)
      

  3.   

    既然都用hibernate3了,干吗还用hql
    查询数据库,返回一个List,然后用deleteall方法
      

  4.   

    ("delete Flow from id in ("+ range +")")这个写错了吧
      

  5.   


    首先你的sql语句就有错!!!!!!!!!!!!!!!delete Flow from id ------->>>>>>>delete Flow where id  ----------------------String range = "1,2,3,4";
    String ranges[]=range.split(",");
    Query q= session.createQuery("delete Flow from id in ( :range )")
    q.setParameterList("range",ranges);
    q.executeUpdate();
    tx.commit();
      

  6.   

    String range = "1,2,3,4";
    String ranges[]=range.split(",");
    Query q= session.createQuery("delete Flow where id in ( :range )")
    q.setParameterList("range",ranges);
    q.executeUpdate();
    tx.commit();
      

  7.   

    如果要用Sql , 还是用CreateSQLQuery吧
    用了批量删除后, 记得执行 session.flush(), session.clear()