2014-03-03 5 views
4

아래에있는 내 HQL이 :최대 절전 모드가 던지는 기대 OPEN 발견 '+'

update User set count = count + ?2 where id = ?1 

는 예외 세부 사항은 아래에있다 :

org.hibernate.hql.internal.ast.QuerySyntaxException: expecting OPEN, found '+' near line 1, column 71 [update com.yitaosoft.edm.common.persist.entity.User set count = count + ? where id = ?] 
    at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:54) 
    at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:47) 
    at org.hibernate.hql.internal.ast.ErrorCounter.throwQueryException(ErrorCounter.java:79) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:278) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:182) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:138) 

내가 계산 = 사용자 설정 수를 업데이트 할 + xx 여기서 id = xx. 구문 오류가 발생했습니다. 왜 ? 그것은 hql에서 지원하지 않는가 ?? 이 문제를 해결하는 방법 ??

답변

1
Query query = session.createQuery("update User set count = count + :count" +" where id = :Id"); 
query.setParameter("Id", id); 
query.setParameter("count", count); 
+0

, 그것은 스프링 JPA 스타일 좋아 요소이지만, 그것은 단지 지금 자리를 지원합니다. @Query (값 = "업데이트 사용자 집합 개수 = 개수 +? 2 어디 = = 1", 쓰기 = true) \t 공개 무효 addCount (긴 ID, int 개수); –

5

문제는 fieldname 개수입니다. 예약어이며 따옴표를 붙여야합니다.
Expected OPEN은 HQL 구문 분석기가 count(<expression>) SQL 표현식이 아닌 count = ...이 아님을 의미합니다. 유일한 해결책은 별명 User로하고 같은 점으로 구분 된 필드 이름을 강제로 : 나는 날에 의해 작성된 구성 요소를 사용하고

+1

다른 단어를 별칭으로 사용하면 나를 위해 일했습니다. 감사 –

관련 문제