为什么MySQLDriver没有Nullable Column Option?

时间:2016-12-22 15:36:48

标签: scala playframework slick

我在光滑的表定义中有这行代码

def firstName = column[Option[String]]("first_name", O.Nullable)

但是我在编译时遇到了这个错误

[error] /Users/roy/adivinate/survey2/app/model/Respondent.scala:36:
 value Nullable is not a member of slick.driver.MySQLDriver.ColumnOptions

我很困惑,因为这正是我在其他代码中看到的语法,尽管我不确定他们是否在使用MySQLDriver。我想为空列做什么?

1 个答案:

答案 0 :(得分:1)

O.Nullable已弃用。声明字段Option[T]将完成这项工作。

将模型类中的字段声明为Option[T]而不是T,以使相应的列为Nullable

让我们用一个例子来理解这个

case class Foo(name: String, rating: Option[Int])

class Foos(tag: Tag) extends Table[Foo](tag, "foos") {
  def name = column[String]("name") //name is not null
  def rating = column[Option[Int]]("rating") //rating is nullable
  def * = (name, rating) <> (Foo.tupled, Foo.unapply)
}

如果你想让它成为可空的东西,只需将其声明为Option字段,那就是它的光滑将理解并生成具有该特定字段的可以为空的sql。

上述设计采用Scala Option设计,无缝且完善。 Scala中的含义是直接转换为sql中的Nullable。

旧版本的Slick

您必须通过在列声明中显式传递O.NotNull来告知特定列不为空,但在新版本的光滑中不需要它