gpt4 book ai didi

mysql - 如何修复 INSERT 上返回的单个 AutoInc 列的 Slick 异常

转载 作者:行者123 更新时间:2023-11-29 18:19:07 26 4
gpt4 key购买 nike

我尝试实现以下位置提供的 akka-http Rest 示例 https://github.com/ArchDev/akka-http-rest 但我坚持了

    slick.SlickException: This DBMS allows only a single column to be returned from an INSERT, and that column must be an AutoInc column.
at slick.jdbc.JdbcStatementBuilderComponent$JdbcCompiledInsert.buildReturnColumns(JdbcStatementBuilderComponent.scala:67)

这是 Scala 代码:注册API:

path("signUp") {
pathEndOrSingleSlash {
post {
entity(as[UsernamePasswordEmail]) { userEntity =>
complete(Created -> signUp(userEntity.username, userEntity.email, userEntity.password))
}
}
}
}

AuthService.scala

def signUp(login: String, email: String, password: String): Future[AuthToken] =
authDataStorage
.saveAuthData(AuthData(UUID.randomUUID().toString, login, email, password.sha256.hex))
.map(authData => encodeToken(authData.id))

AuthDataStorage.scala

...
override def saveAuthData(authData: AuthData): Future[AuthData] =
db.run((auth returning auth).insertOrUpdate(authData)).map(_ => authData)
...

由于我是 Scala 和 Slick 的新手,因此即使我在 Model 中定义了 O.AutoInc,无论如何也可以提供发生此异常的信息。我正在使用 MySQL RDBMS

最佳答案

问题在于返回身份验证。不返回 auth 即完整对象,只需返回自动增量 Id id 即可。 Slick 不支持返回完整的对象,尽管它可以正确编译。它不会生成有效的 sql 查询。

一旦您可以访问自动增量id,您就可以使用函数的参数构建AuthData

代码:

(auth returning auth.map(_.id)).insertOrUpdate(authData)).map(id => authData.copy(id = id))

关于mysql - 如何修复 INSERT 上返回的单个 AutoInc 列的 Slick 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46747258/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com