Scala 纬管onconflictupdate多个值
在quill中,是否有可能在冲突中更新多个值?例如:Scala 纬管onconflictupdate多个值,scala,dsl,quill.io,Scala,Dsl,Quill.io,在quill中,是否有可能在冲突中更新多个值?例如: val a = quote { query[Product] .insert(_.id -> 1, _.sku -> 10) .onConflictUpdate((t, e) => t.sku -> (t.sku + e.sku), t.abc -> e.abc) } 我像上面那样尝试,当我有两个值时,总是得到一个“not found:value t”错误。文档也没有回答这个方向的问题。是的
val a = quote {
query[Product]
.insert(_.id -> 1, _.sku -> 10)
.onConflictUpdate((t, e) => t.sku -> (t.sku + e.sku), t.abc -> e.abc)
}
我像上面那样尝试,当我有两个值时,总是得到一个“not found:value t”错误。文档也没有回答这个方向的问题。是的,您可以在插入冲突时更新多个值。为此,只需为多个lambda提供映射,如下所示
val q = quote {
query[Product]
.insert(lift(product))
.onConflictUpdate(
(t, e) => t.sku -> (t.sku + e.sku),
(t, e) => t.abc -> e.abc)
}
这将为MySQL生成以下SQL:
INSERT INTO product (id,sku,abc) VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE sku = (sku + VALUES(sku)), abc = VALUES(abc)
不幸的是,这不起作用。我得到了这个错误:“宏扩展期间的异常:java.lang.IllegalStateException:'DoUpdate'语句需要显式冲突目标”,那么我猜您的目标不是MySQL。对于其他数据库,您必须明确指定要测试冲突的字段,例如,
.onConflictUpdate(u.id)((t,e)=>…
,这将导致类似冲突(id)DO UPDATE…