Play Framework + Slick 3.0.0 ProvenShape问题中的简单PostgreSQL查询

时间:2016-03-24 17:49:30

标签: playframework-2.5

我正在使用Play Framework,现在我正在尝试使用简单的表"用户"来访问PostgreSQL数据库,定义如下:

SELECT * FROM users;
id  | first_name | last_name | email | password 
-c--+------------+-----------+-------+----------
AI  | text       | text      | text  | text

在Play中,我有我的用户案例类:

case class User(id: Int, mail: String, pwd: String, firstName: String, lastName: String)

我正在使用以下导入:

import play.api.db.slick.DatabaseConfigProvider
import slick.driver.PostgresDriver
import slick.driver.PostgresDriver._
import slick.lifted.Tag

我可以将我的数据库用于以下

@Inject
// Inject Database config provider lib
var dbConfigProvider: DatabaseConfigProvider = _

val dbConfig = dbConfigProvider.get[PostgresDriver]

import dbConfig.driver._

我正在关注此地址上的Slick 3.0.0的文档:http://slick.typesafe.com/doc/3.0.0/queries.html#queries。为了构建我的请求,我首先尝试执行以下操作:

class Users(tag: Tag) extends Table[(Int,String,String,String,String)](tag, "users") {
  def id = column[Int]("id", O.PrimaryKey, O.AutoInc)
  def mail = column[String]("email")
  def pwd = column[String]("password")
  def firstName = column[String]("first_name")
  def lastName = column[String]("last_name")
  def * = (id,mail,pwd,firstName,lastName)
}

这并不成功:我的IDE说Expression不符合预期的类型ProvenShape,./activator compile

[...] could not find implicit value for parameter tt: slick.ast.TypedType[Int]

我其次尝试使用以下链接slick.typesafe.com/doc/3.0.0/schemas.html#mapped-tables并写下:

class Users(tag: Tag) extends Table[User](tag, "users") {
  def id = column[Int]("id", O.PrimaryKey, O.AutoInc)
  def mail = column[String]("email")
  def pwd = column[String]("password")
  def firstName = column[String]("first_name")
  def lastName = column[String]("last_name")
  def * = (id, mail, pwd, firstName, lastName) <> (User.tupled, User.unapply)
}

但IDE无法识别&#34;&lt;&gt;&#34;符号,加上unapply方法中缺少args ......

你有任何线索吗?我现在迷路了...

谢谢!

screenshot of intellij error

1 个答案:

答案 0 :(得分:2)

经过数小时的研究,我终于找到了问题所在。为了解决这个问题,我有:

  • 更新了Slick到build.sbt中的最新版本:

SubClass

  • 导入api(而不仅仅是驱动程序......)

libraryDependencies ++= Seq( "com.typesafe.play" %% "play-slick" % "2.0.0", "com.typesafe.play" %% "play-slick-evolutions" % "2.0.0" )

现在一切都好。