我在光滑的表定义中有这行代码
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。我想为空列做什么?
答案 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来告知特定列不为空,但在新版本的光滑中不需要它