使用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文档,他们没有提供任何关于此的正确信息)
答案 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