1

我在我的应用程序中使用 struts2 和 hibernate jpa,并且在使用带有 hibernate 的更新查询进行托盘处理时出现错误这是我的代码:

在我的课堂上

@Override
public void UpdateNoteEvaluation() {
    try {
        String hql="update Evaluation e " +
                "SET e.Eval_NoteGlobal =: ( SELECT SUM( sv.SousEval_Note ) AS sum FROM sousevaluation sv )" +
                "ORDER BY EVAL_ID DESC LIMIT 1 ";
        Query q= session.createQuery(hql);

        q.executeUpdate();

    } catch (Exception e) {
        transaction.rollback();
        e.printStackTrace();
    }   
}

在我的课堂行动中:

public String saveOrUpdate(){   
    sousevaldao.UpdateNoteEvaluation();
    System.out.println("update note ok ok");

    return SUCCESS;
}

所以在这里我无法进行更新我收到此错误:

java.lang.IllegalArgumentException: node to traverse cannot be null!
    at org.hibernate.hql.ast.util.NodeTraverser.traverseDepthFirst(NodeTraverser.java:55)
    at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:277)

知道我已经测试了更新查询我 phpmyadmin 它工作正常

4

1 回答 1

1

如果查询已经通过 phpMyAdmin 进行了测试,那么很明显查询是 SQL 查询 - 而不是 HQL 查询。查询的语法似乎也包含 MySQL SQL 方言特定 LIMIT子句。

Query对于本机 SQL 查询,可以通过以下Session.createSQLQuery(String queryString)方法创建:

String sql = ...
Query q = session.createSQLQuery(sql);
于 2013-09-19T17:44:10.063 回答