1

我正在尝试根据另一个表的两个可能列之一在一个表中设置一列。 由于 HQL 更新不支持联接,我正在尝试解决并ORset语句中使用 an,但是,我无法找到很多关于它的文档

类似的查询似乎在某些风格的 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 ...

4

1 回答 1

0

看起来您不能在 HQLupdate语句中使用表达式。不得不将其分成两个查询,例如:

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)

然后 type 类似的东西baz

于 2013-04-30T19:52:52.143 回答