【发布时间】:2013-09-17 14:54:21
【问题描述】:
我正在尝试使用 Slick 和 Play2 框架的简单测试应用程序,但编译器一直抱怨无法推断隐式会话。
这是我的Build.scala:
import sbt._
import Keys._
import play.Project._
object ApplicationBuild extends Build {
val appName = "dummy"
val appVersion = "1.0"
val appDependencies = Seq(
jdbc,
"mysql" % "mysql-connector-java" % "5.1.26",
"com.typesafe.slick" %% "slick" % "1.0.1"
)
val main = play.Project(appName, appVersion, appDependencies).settings(
// Add your own project settings here
)
}
这是保存我的数据库连接的全局单例:
package models
import play.api.Play.current
import play.api.db.DB
import slick.session.Session
import slick.driver.MySQLDriver.simple._
import scala.slick.session.Database.threadLocalSession
object Global {
lazy val database = Database.forDataSource(DB.getDataSource())
lazy val session = database.createSession()
}
还有我的控制器:
package controllers
import scala.language.implicitConversions
import play.api._
import play.api.mvc._
import models.Global.session
import slick.driver.MySQLDriver.simple._
object Application extends Controller {
def index = Action {
/*slick.driver.MySQLDriver.simple.*/Query(Foo).foreach( _ => () ) // Do nothing for now
Ok(views.html.index("hola"))
}
object Foo extends Table[(Long, String, String)]("Foo") {
def * = column[Long]("id") ~ column[String]("bar1") ~ column[String]("bar2")
}
}
如您所见,我的Global.session val 已导入,但一直提示未找到隐式会话。
【问题讨论】:
-
你试过'lazy implicit val session = database.createSession()'吗?
-
是的,我做了,但它仍然不起作用。
-
除非有充分的理由,否则不要使用 threadLocalSession 或 beginSession。使用 database.withSession{implicit session : Session => ... } 代替有人建议。
标签: scala playframework-2.0 slick