Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Groovy HQL更新中使用表达式_Groovy_Sql Update_Hql - Fatal编程技术网

在Groovy HQL更新中使用表达式

在Groovy HQL更新中使用表达式,groovy,sql-update,hql,Groovy,Sql Update,Hql,我试图根据另一个表中两个可能的列中的一个,在一个表中设置一个列。不支持联接,我正在尝试在set语句中使用或,但是,我找不到太多关于它的内容 类似的查询似乎可以在某些SQL风格中使用,但我似乎无法在Groovy的HQL中使用: String queryString = """ update Foo foo set foo.myValue = ( (foo.fooType = :typeBar AND :barFlag = true) OR (foo.

我试图根据另一个表中两个可能的列中的一个,在一个表中设置一个列。不支持联接,我正在尝试在
set
语句中使用
,但是,我找不到太多关于它的内容

类似的查询似乎可以在某些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:意外的ast节点:或靠近行…

看起来您不能在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
执行类似操作