我在这里对我最近提出的另一个 Slick 问题(Slick table Query: Trouble with identify values)进行了跟进。请多多包涵!!我是数据库新手,Slick 在文档方面似乎特别差。无论如何,我有这张桌子:
object Users extends Table[(Int, String)]("Users") {
def userId = column[Int]("UserId", O.PrimaryKey, O.AutoInc)
def userName = column[String]("UserName")
def * = userId ~ userName
}
第一部分
我正在尝试使用此功能进行查询:
def findByQuery(where: List[(String, String)]) = SlickInit.dbSlave withSession {
val q = for {
x <- Users if foo((x.userId, x.userName), where)
} yield x
q.firstOption.map { case(userId, userName) =>
User(userId, userName)}
}
其中“where”是搜索查询列表 //ex. ("userId", "1"),("userName", "Alex") "foo" 是一个测试相等性的辅助函数。我遇到了类型错误。
x.userId 的类型为 Column[Int]。如何将其作为 Int 进行操作?我试过铸造,例如:
foo(x.userId.asInstanceOf[Int]...)
但我也遇到了麻烦。如何处理 Slick 返回类型?
第二部分 有没有人熟悉强制转换功能:
def * = userId ~ userName <> (User, User.unapply _)
? 我知道这个问题有一些很好的答案,最值得注意的是:scala slick method I can't understand so far and a very similar question here: mapped projection with companion object in SLICK。但是任何人都可以解释为什么编译器会响应
<> method overloaded
对于那一行简单的代码?