Scala 纬管onconflictupdate多个值

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”错误。文档也没有回答这个方向的问题。是的

在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”错误。文档也没有回答这个方向的问题。

是的,您可以在插入冲突时更新多个值。为此,只需为多个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…