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

wrong number of type arguments for slick.driver.H2Driver.api.Table, should be 1

使用 Play 框架 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 _)
}

我收到一大堆错误,这些错误还不清楚。错误的数量清楚地表明我使用过时的教程从(我的 Manning Play for Scala 书中也没有涵盖这个......)复制我的模型 class 的结构,或者只是错误的导入......我可以在网上找到任何关于将 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

如果我的问题太宽泛,也可以使用 link 教程或​​ Github 项目。我就是无法开始开发这样一个合理的应用程序。 (请不要参考 Play Framework 文档,他们没有提供任何相关信息)

在你的 build.sbt 添加为依赖项

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

然后只导入

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

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

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

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

此外,选项 O.NotNull 也已从 Slick 3.1 中删除。并且会导致编译错误。相反,您只需使用已有的非 Option 类型即可指定 not null。例如:

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

对于可为 null 的字段,您将类型包装在一个选项中,因此可为 null 的字符串类似于:

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

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