Простой запрос PostgreSQL в Play Framework + проблема Slick 3.0.0 ProvenShape

Я играю с Play Framework, и теперь я пытаюсь получить доступ к базе данных PostgreSQL с простой таблицей «пользователи», определенной следующим образом:

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

В Play у меня есть класс User case:

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 не может распознать символ "‹>", плюс в методе unapply отсутствуют аргументы...

У тебя есть какие-нибудь подсказки для меня? Я сейчас потерян...

Спасибо!

скриншот ошибки Intellij


person Colin Leverger    schedule 24.03.2016    source источник


Ответы (1)


После нескольких часов исследований я наконец нашел проблему. Чтобы исправить это, у меня есть:

  • Обновлен Slick до последней версии в build.sbt:

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

  • Импортируйте API (и не только драйвер...)

import dbConfig.driver._ // THIS was the problem import dbConfig.driver.api._ // .api._ is important...

Сейчас все нормально.

person Colin Leverger    schedule 27.03.2016