2013-04-30 11 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) 

然後東西。