玩框架+ SLICK(Scalaquery)教程(Play framework + SLICK (S

2019-07-30 07:18发布

是否有人知道一个好的教程或示例项目使用播放框架用油滑(ScalaQuery)的(github上)的? 我努力使他们一起工作。

我得到这个错误:

[info] play - Application started (Dev)
[error] application - 

! @6b13oi41c - Internal server error, for request [GET /listBooks] ->

play.core.ActionInvoker$$anonfun$receive$1$$anon$1: Execution exception [[NoClassDefFoundError: Could not initialize class scala.slick.ast.opt.Relational$]]
    at play.core.ActionInvoker$$anonfun$receive$1.apply(Invoker.scala:134) [play_2.9.1-2.0.2.jar:2.0.2]
    at play.core.ActionInvoker$$anonfun$receive$1.apply(Invoker.scala:115) [play_2.9.1-2.0.2.jar:2.0.2]
    at akka.actor.Actor$class.apply(Actor.scala:318) [akka-actor-2.0.2.jar:2.0.2]
    at play.core.ActionInvoker.apply(Invoker.scala:113) [play_2.9.1-2.0.2.jar:2.0.2]
    at akka.actor.ActorCell.invoke(ActorCell.scala:626) [akka-actor-2.0.2.jar:2.0.2]
    at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:197) [akka-actor-2.0.2.jar:2.0.2]
Caused by: java.lang.NoClassDefFoundError: Could not initialize class scala.slick.ast.opt.Relational$
    at scala.slick.driver.BasicProfile$class.processAST(BasicProfile.scala:18) ~[slick_2.10.0-M4-0.10.0-M2.jar:0.10.0-M2]
    at scala.slick.driver.PostgresDriver$.processAST(PostgresDriver.scala:69) ~[slick_2.10.0-M4-0.10.0-M2.jar:0.10.0-M2]
    at scala.slick.driver.BasicProfile$class.createQueryBuilder(BasicProfile.scala:22) ~[slick_2.10.0-M4-0.10.0-M2.jar:0.10.0-M2]
    at scala.slick.driver.PostgresDriver$.createQueryBuilder(PostgresDriver.scala:69) ~[slick_2.10.0-M4-0.10.0-M2.jar:0.10.0-M2]
    at scala.slick.driver.BasicProfile$class.buildSelectStatement(BasicProfile.scala:23) ~[slick_2.10.0-M4-0.10.0-M2.jar:0.10.0-M2]
    at scala.slick.driver.PostgresDriver$.buildSelectStatement(PostgresDriver.scala:69) ~[slick_2.10.0-M4-0.10.0-M2.jar:0.10.0-M2]
[error] application - 

这里是我的书模型:

package models

import play.api.db._
import play.api.Play.current

import scala.slick.driver.PostgresDriver.simple._
import scala.slick.ql.{MappedTypeMapper}
import scala.slick.session.{Session, Database}

case class Book(name: String, filename: String)

object Book extends Table[(Long, String, String)]("book") {

  lazy val database = Database.forDataSource(DB.getDataSource())
  def id = column[Long]("id", O PrimaryKey, O AutoInc)
  def name = column[String]("name", O NotNull)
  def filename = column[String]("filename", O NotNull)
  def * = id ~ name ~ filename

  def findAll() : Seq[Book] = database.withSession { implicit db:Session =>
    (for(t <- this) yield t.name ~ t.filename).list.map(attrs => Book(attrs._1, attrs._2))
  }

  def create(book: Book): Unit = database.withSession { implicit db:Session =>
    this.name ~ this.filename insert(book.name, book.filename)
  }

}

编辑:
这是我的Build.scala

import sbt._
import Keys._
import PlayProject._

object ApplicationBuild extends Build {

    val appName         = "PlayWithScala"
    val appVersion      = "1.0-SNAPSHOT"

    val appDependencies = Seq(
      // Add your project dependencies here,
      "postgresql" % "postgresql" % "9.1-902.jdbc4",
      "com.typesafe" % "slick_2.10.0-M4" % "0.10.0-M2"
    )

    val main = PlayProject(appName, appVersion, appDependencies, mainLang = SCALA).settings(
      // Add your own project settings here      
    )

}

Answer 1:

我分享了这个链接作为教程http://www.jroller.com/ouertani/entry/getting_started_with_play_2



Answer 2:

编辑现在Play2.1已经进入RC过程中,我们可以用油滑。 这是因为Play2.1使用Scala2.10(RC以及)下的大海,因为油滑将是类型安全堆栈中的默认数据库访问库。

要记得,油滑现在能够访问关系型数据库,并很快将目标MongoDB的为好。 它使用一个漂亮(^^)内部DSL查询后端。 这DSL是由宏管理,这就是为什么需要斯卡拉2.10。

但是,请注意宏观系统处于试验状态下(即使Scala2.10将被释放)。 我还不知道在不久的将来,油滑的lib这种地位的潜在警告。

要享受这个RC,去那里Play2.1RC1和浏览文档......也有很多的变化在那里,像JSON API使用网络


Hmmmm。 不知道,油滑将开箱与游戏一样简单。

因为玩2.0实际上是建立在Scala的2.9.x,其中光滑正在请求2.10(为微距)。

因此,在第一次有你在声明(在DEPS之间的不匹配slick_2.10.0-M4是说我使用的Scala 2.10.0-M4),并且会使用的斯卡拉版本。

顺便说一句,根据这个例子网站 (用于油滑)您的SBT的DEP似乎确定。 但问题可能出现的是,司机将所需的其他DEPS(AST可能),并留下SBT发现使用你正在使用(这是由在“articfact名”宣告无阶版本依赖性完成)当前斯卡拉版本正确的版本= >此情况下,AST不会被发现,因为它不存在预先2.10。

什么可以尝试是定义阶的另一个版本对整个项目...

我2C



Answer 3:

使用播放2.1,与最新发布油滑(1.0.1-RC1),你会使用:

val appDependencies = Seq(
  "com.typesafe.slick" %% "slick" % "1.0.1-RC1",
  ...
}


文章来源: Play framework + SLICK (Scalaquery) tutorial