在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节点:或靠近行…
看起来您不能在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)
然后对类型baz
执行类似操作