【问题标题】:How can i write update query with condition in hibernate如何在休眠中编写带有条件的更新查询
【发布时间】:2012-08-05 06:52:46
【问题描述】:
public String passlink(String companyName, String mailName) {

    Session session = Hibernateutil.getSessionFactory().openSession();

    Transaction transaction = null;

    try {
        transaction = session.beginTransaction();

        String queryString="UPDATE account SET companyname = :companyName WHERE companyname like 'm' AND Email LIKE :mailName";
        Query query=session.createQuery(queryString);

        query.setParameter("companyName", companyName);
        query.setParameter("mailName", mailName);
        int result = query.executeUpdate();

        System.out.println("Rows affected: " + result);

            System.out.println("Successfully updated");
        transaction.commit();

    } catch (Exception e) {
        value = "FAIL";
                   e.printStackTrace();
        //System.out.println("Error--> " + e.getMessage());
    }
    return value;

}

我写更新查询

String queryString="UPDATE account SET companyname = :companyName WHERE companyname like 'm' AND Email LIKE :mailName";

像这样,但它给出了以下错误。

java.lang.IndexOutOfBoundsException:索引:0,大小:0 在 java.util.ArrayList.RangeCheck(未知来源) 在 java.util.ArrayList.get(未知来源) 在 org.hibernate.hql.ast.HqlSqlWalker.postProcessUpdate(HqlSqlWalker.java:390) 在 org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:164) 在 org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:189) 在 org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:130) 在 org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:83) 在 org.hibernate.impl.SessionFactoryImpl.getQuery(SessionFactoryImpl.java:425) 在 org.hibernate.impl.SessionImpl.getQueries(SessionImpl.java:880) 在 org.hibernate.impl.SessionImpl.executeUpdate(SessionImpl.java:861) 在 org.hibernate.impl.QueryImpl.executeUpdate(QueryImpl.java:89) 在 com.njob.dao.AccountDao.passlink(AccountDao.java:213) 在 com.njob.action.companylink.doPost(companylink.java:34) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:709) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) 在 org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:825) 在 org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:731) 在 org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:526) 在 org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) 在 org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) 在 java.lang.Thread.run(Unknown Source)

【问题讨论】:

    标签: java sql hibernate


    【解决方案1】:

    将查询更改为

    String queryString="UPDATE account SET companyname = :companyName WHERE companyname like 'm' AND email LIKE :mailName";
    

    并使用

    query.setParameter("companyName", companyName);
    query.setParameter("mailName", mailName);
    

    见

    【讨论】:

    • 它给出了同样的错误参数 companyname does not exist as a named parameter
    • 如果您在查询中看到companyName,则存在拼写错误
    • 好吧,它的 companyName 不是 companyname,请尝试从我的答案中复制和粘贴
    • 这是一个 IndexOutOfBounds 异常,请参阅stackoverflow.com/questions/3019281/…
    • 在 catch 块中添加 e.printStacktrace() 并发布其输出
    【解决方案2】:

    试试这个

     query.setParameter("companyName", companyName);
    

    你使用的参数是companyName

    【讨论】:

      猜你喜欢
      • 2016-05-16
      • 1970-01-01
      • 1970-01-01
      • 2014-06-23
      • 2021-06-14
      • 1970-01-01
      • 2020-04-13
      • 2012-03-17
      相关资源
      最近更新 更多