2013-04-30 7 views
1

Я пытаюсь установить столбец в одной таблице на основе одного из двух возможных столбцов из другого. Since HQL updates не поддерживают соединения, я пытаюсь работать и использовать OR в заявлении set, однако я не могу найти много documentation на нем.Использование выражения в Groovy Обновление HQL

Похожие запросы появляются на работу в некоторых разновидностях SQL, но я не могу заставить его работать в HQL Groovy,:

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. Если бы разбить его на два запроса вместо этого, например .:

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) 

то что-то подобное для типа baz.

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