1

単純なテーブルがあり、IDの配列でデータを削除しようとしています。

Integer[] arrayIDs = {1,2,3}; //External ids as parameteres
    Query deleteItemsQuery = session.createQuery("DELETE Items WHERE id IN (:idsDeletingItems)"); //(in this row exception)
deleteItemsQuery.setParameterList("idsDeletingItems", arrayIDs);
deleteItemsQuery.executeUpdate();

そして私のアプリは例外をスローします

また、1つのパラメータを削除してみます。例えば

Query deleteItemsQuery = session.createQuery("DELETE Items WHERE id = '1'");
deleteItemsQuery.executeUpdate();

そして、そのバリアントでは問題ありません。

しかし、次に行うときは例外もあります

Integer myID = 1;
Query deleteItemsQuery = session.createQuery("DELETE Items WHERE id = (:myID)");
    deleteItemsQuery.setParameter("myID", myID);
    deleteItemsQuery.executeUpdate();

私はこの方言org.hibernate.dialect.Oracle10gDialectを使用します。何か案は?

例外

exception 

javax.servlet.ServletException: java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I
    org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:295)
    org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:170)
    org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:113)
    org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:425)
    org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:228)
    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
    org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    com.epam.testapp.presentation.filter.CharsetFilter.doFilter(CharsetFilter.java:44)
    com.epam.testapp.presentation.filter.CommandFilter.doFilter(CommandFilter.java:58)


root cause 

java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I
    org.hibernate.hql.internal.ast.HqlSqlWalker.generateNamedParameter(HqlSqlWalker.java:956)
    org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.parameter(HqlSqlBaseWalker.java:4821)
    org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1347)
    org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.exprOrSubquery(HqlSqlBaseWalker.java:4297)
    org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:3772)
    org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1947)
    org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:794)
    org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.deleteStatement(HqlSqlBaseWalker.java:443)
    org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:263)
    org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:248)
    org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:183)
    org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
    org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:105)
    org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
    org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:168)
    org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:219)
    org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:197)
    org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1736)
    com.epam.testapp.database.NewsHibernateDAO.remove(NewsHibernateDAO.java:89)
    com.epam.testapp.presentation.action.NewsAction.delete(NewsAction.java:150)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    java.lang.reflect.Method.invoke(Unknown Source)
    org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:269)
    org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:170)
    org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:113)
    org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:425)
    org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:228)
    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
    org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
4

2 に答える 2

1

このようにしてください

Integer myID = 1;
Query deleteItemsQuery = session.createQuery("DELETE Items WHERE id =:myID");
    deleteItemsQuery.setParameter("myID", myID);
    deleteItemsQuery.executeUpdate();

「:」と「myID」の間にスペースがないことを確認してください。スペースがないと、別のエラーが発生します。

それが役に立てば幸い ;-)

于 2012-08-09T06:18:28.257 に答える
1

また、この問題に一度遭遇し、HQLに直接配置する代わりに、パラメーターに開始ブレースと終了ブレースを追加することで回避しました。

于 2012-08-09T06:18:29.910 に答える