【问题标题】:HQL :Hibernate update queryHQL :Hibernate 更新查询
【发布时间】:2013-09-24 20:22:02
【问题描述】:

我为我的应用程序使用 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 中测试了更新查询,它工作正常

【问题讨论】:

    标签: sql hibernate jpa struts2 hql


    【解决方案1】:

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

    Query 用于原生 SQL 查询可以通过 Session.createSQLQuery(String queryString) 方法创建:

    String sql = ...
    Query q = session.createSQLQuery(sql);
    

    【讨论】:

    • +1 这个Query q = session.createSQLQuery(sql); 工作正常,但我想要你是否可以使用 hql 的语法进行调整
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    相关资源
    最近更新 更多