slick.driver.H2Driver.api.Table的类型参数数量错误,应为1

时间:2015-10-25 13:08:54

标签: scala playframework slick

使用Play framework 2.4.3和Slick 3.1

我有以下型号:

package models

import slick.driver.H2Driver.simple._
import slick.driver.H2Driver.api.Table
import slick.lifted.Tag

case class Subject(name: String, description: String)

/* Table mapping
 */
class SubjectsTable(tag: Tag) extends Table[Subject](tag, "SUBJECT") {

  def name = column[String]("name", O.PrimaryKey)

  def description = column[String]("description", O.NotNull)

  def * = (name, description) <>(Subject.tupled, Subject.unapply _)
}

我得到了大量的错误,这些错误很明显。错误的数量显然意味着我已经使用了一个过时的教程来复制我的Model类的结构(我的Manning Play for Scala书也没有涵盖这个......)或只是错误的导入..我找不到任何在线使用Slick与Play Framework的实用教程,这真的是所有Play都提供的吗?

[error] /app/models/Subject.scala:3: value simple is not a member of object slick.driver.H2Driver
[error] import slick.driver.H2Driver.simple._
[error]                              ^
[error] /app/controllers/Subjects.scala:25: type arguments [controllers.Subjects] conform to the bounds of none of the overloaded alternatives of
[error]  value apply: [E <: slick.lifted.AbstractTable[_]]=> slick.lifted.TableQuery[E] <and> [E <: slick.lifted.AbstractTable[_]](cons: slick.lifted.Tag => E)slick.lifted.TableQuery[E]
[error]   val subjects: TableQuery[Subjects] = TableQuery[Subjects]
[error]                                        ^
[error] /app/controllers/Subjects.scala:34: value all is not a member of slick.lifted.TableQuery[controllers.Subjects]
[error]     val allSubjects = dbConfig.db.run(subjects.all())
[error]                                                ^
[error] /app/models/Subject.scala:13: could not find implicit value for parameter tt: slick.ast.TypedType[String]
[error]   def name = column[String]("name", O.PrimaryKey)
[error]                            ^
[error] /app/models/Subject.scala:15: value NotNull is not a member of slick.driver.H2Driver.ColumnOptions
[error]   def description = column[String]("description", O.NotNull)
[error]                                                     ^
[error] /app/models/Subject.scala:15: could not find implicit value for parameter tt: slick.ast.TypedType[String]
[error]   def description = column[String]("description", O.NotNull)
[error]                                   ^
[error] /app/tables/Subjects.scala:7: wrong number of type arguments for slick.driver.H2Driver.api.Table, should be 1
[error] class Subjects(tag: Tag) extends Table[String, String](tag, "SUBJECTS") {

我尝试使用教程here

中的文件

如果我的问题过于宽泛,那么像教程或Github项目的链接也可以。我无法开始开发这样一个合理的应用程序。 (请不要参考Play Framework文档,他们没有提供任何关于此的正确信息)

2 个答案:

答案 0 :(得分:1)

看起来您使用的示例已过时。示例所属的activator-play-slick project适用于Play 2.3和Slick 0.7.0。

早期版本的Slick已弃用slick.driver.H2Driver.simple._ API,现已完全删除。相反,你应该使用:

 import slick.driver.H2Driver.api._
 import slick.lifted.Tag

此外,选项O.NotNull也已从Slick 3.1中删除。并将导致编译错误。相反,您只需使用非选项类型即可指定非空值。 E.g:

def stringCol = column[String]("string_col")

对于可为空的字段,您将类型包装在一个选项中,因此可以为空的字符串看起来像:

def nullableStringCol = column[Option[String]]("nullable_string_col")

您可以在最新的光滑文档here中找到更多有关如何指定的更新示例。这比播放文档中包含的内容更加全面。

答案 1 :(得分:0)

build.sbt添加为依赖

"com.h2database"  %    "h2"      %    "1.4.190" 

然后导入

import slick.driver.H2Driver.api._
import slick.lifted.Tag