2016-03-24 637 views
0

ich mit Play-Framework spielte, und ich versuche jetzt eine PostgreSQL-Datenbank mit einer einfachen Tabelle „Benutzer“ zugreifen zu können, wie folgt definiert:Einfache PostgreSQL Abfrage im Play-Framework + Slick 3.0.0 ProvenShape Ausgabe

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

Im Play, habe ich meine Benutzer Fall Klasse:

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

ich mit den folgenden Importe arbeite:

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

kann ich meine Datenbank mit dem

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

val dbConfig = dbConfigProvider.get[PostgresDriver] 

import dbConfig.driver._ 

Ich folge der doc von Slick 3.0.0, die auf dieser Adresse lautet: http://slick.typesafe.com/doc/3.0.0/queries.html#queries. Zu meiner Anfrage zu bauen versucht haben, ich zuerst folgendes zu tun:

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) 
} 

Und es war kein Erfolg: meine IDE sagt, dass Expression nicht zu erwarten Typ ProvenShape nicht entspricht, und ./activator compile sagt, dass

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

ich habe versucht, zweitens die folgenden Link slick.typesafe.com/doc/3.0.0/schemas.html#mapped-tables zu verwenden und schrieb dies:

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) 
} 

Aber die IDE ist nicht in der Lage, die "zu erkennen <>“Symbol, und wird args in der Unapply Methode fehlt ...

Haben Sie Anhaltspunkte für mich? Ich bin jetzt verloren ...

Dank!

screenshot of intellij error

Antwort

1

Nach Stunden der Forschung, fand ich endlich das Problem. Um es zu beheben, ich habe:

  • letzte Version in build.sbt Slick Aktualisiert:

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

  • Import der api (und nicht nur den Fahrer ...)

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

Jetzt ist alles in Ordnung.