Scala Slick。如何使用 Case 更改列值

问题描述 投票:0回答:2
case class User(name: String, age: Int)

def changeNameQuery(): Query[UserTable, User, Seq] = {
  TableQuery[UserTable].map { user => 
    (Case If (user.name === "A") Then "B" Else "A",
     user.age
    )
  }
}

我收到此错误

[error]  found   : slick.lifted.Query[(slick.lifted.Rep[String], slick.lifted.Rep[Int]),(String, Int),Seq]
[error]  required: repositories.postgres.PostgresProfile.api.Query[repositories.postgres.UserTable,model.User,Seq]

也许有某种方法可以从元组中获取表对象?

scala slick
2个回答
0
投票

乍一看这似乎是打字问题。您说您将返回一个

Query[User Table, User, Seq]
,这意味着您将从用户表中返回用户列表。该错误表明您正在返回一个元组
(String,Int)
而不是
User

而不是做

(
  Case If (user.name === "A") Then "B" Else "A",
  user.age   
)

您需要返回

User
或更改方法的返回类型。这取决于你需要什么


0
投票

您是否考虑过使用 slick.jdbc.Database.run 方法? val db: 数据库 = Database.forConfig("myDatabase") .... db.run(analyticsActivityTableQuery += 值) 您可以检查并更新 value 的值。

© www.soinside.com 2019 - 2024. All rights reserved.