2013-04-30 1 views
1

다른 테이블에서 두 개의 가능한 열 중 하나를 기반으로 한 테이블의 열을 설정하려고합니다. Since HQL updates은 조인을 지원하지 않으므로 set 문에서 OR을 사용하려고합니다. 그러나 많은 것을 찾을 수 없습니다. documentation.Groovy HQL 업데이트에서 표현식 사용

비슷한 쿼리는 SQL의 일부 맛에 작동하는 것처럼,하지만 난 그게 Groovy의 HQL에서 작동시킬 수없는 것 :

String queryString = """ 
    update Foo foo 
    set foo.myValue = (
     (foo.fooType = :typeBar AND :barFlag = true) OR 
     (foo.fooType = :typeBaz AND :bazFlag = true) 
    )""" 

Map args = [ 
    typeBar: Type.BAR,//String 
    typeBaz: Type.BAZ,//String 
    barFlag: bar,//Boolean 
    bazFlag: baz,//Boolean 
] 

Foo.executeUpdate(queryString, args) 

내가 갖는 예외는 다음과 같습니다

org.hibernate.hql.ast.QuerySyntaxException: unexpected AST node: OR near line ...

답변

0

HQL update 문에서 표현식을 사용할 수없는 것처럼 보입니다. : 대신 두 개의 쿼리에 입력 baz 비슷한

다음
String queryString = """ 
    update Foo foo 
    set foo.myValue = :bar 
    where foo.fooType = :type""" 

Map args = [ 
    type: Type.BAR,//String 
    flag: bar,//Boolean 
] 

Foo.executeUpdate(queryString, args) 

뭔가를 예컨대 그것을 끊다했다.