2

我正在尝试将 PostgresRETURNING与 ScalikeJDBC 一起使用(请参阅https://github.com/scalikejdbc/scalikejdbc/issues/559

假设这如何与where子句一起使用。Thereturning(...)是 的成员UpdateSQLBuilder,而 awhere返回 aConditionSQLBuilder

update(Post)
   .set(sqls"${p.views}=${p.views}+${newViews}")
   .where.eq(p.id,id)
   .returning(p.id,p.lastUpdated, p.views) // does not work as it is not a member of ConditionSQLBuilder
4

1 回答 1

5

如您所说,returning不是ConditionSQLBuilder. 但是,您可以在子句append之后使用方法where,因为它是在以下位置定义的ConditionSQLBuilder

update(Post)
   .set(sqls"${p.views} = ${p.views} + ${newViews}")
   .where.eq(p.id, id)
   .append(sqls"returning ${p.id}, ${p.lastUpdated}, ${p.views}"

而且,如果您将使用您的构建器将返回的列映射到一个对象,如下所示:

val postOpt = withSQL(builder).map(Post(p)).single().apply()

然后,您必须在您的 中使用${p.result.columnName}而不是作为参数传递给方法。要映射所有列,只需使用.${p.columnName}SQLSyntaxappend${p.result.*}

于 2020-03-26T12:39:51.313 回答