2013-09-19 5 views
1

я использую Struts2 и спящий режим JPA для моего приложения и у меня есть ошибки при traying с помощью запроса на обновление с Hibernate вот мой код:HQL: 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-им запроса обновления, это прекрасно работать

ответ

1

Если запрос был проверен, работает один через PhpMyAdmin, то вполне очевидно, что запрос SQL запрос - не запрос HQL. Кроме того, синтаксис запроса, похоже, содержит спецификацию SQL SQL диалекта LIMIT.

Query для собственных запросов SQL могут быть созданы с помощью Session.createSQLQuery(String queryString) метода:

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

+1 это 'Запрос д = session.createSQLQuery (SQL);' работы точно, но я хочу, если вы можете отрегулировать с синтаксисом HQL – stoner

Смежные вопросы