我正在尝试使用Postgres'使用ScalikeJDBC RETURNING
(请参阅https://github.com/scalikejdbc/scalikejdbc/issues/559)
这假设如何使用where
子句。 returning(...)
是UpdateSQLBuilder
的成员,而where
则返回ConditionSQLBuilder
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
答案 0 :(得分: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}
而不是SQLSyntax
,并将其作为参数传递给append
方法。要映射所有列,只需使用${p.result.*}
。