2016-12-22 9 views
1

У меня есть эта строка кода в моем гладком определении таблицыПочему у MySQLDriver нет опции Nullable Column?

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

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 с определенным полем как nullable.

Вышеупомянутый дизайн бесшовный и звуковой с дизайном Scala. Значение опции в Scala напрямую преобразуется в Nullable в sql.

В старых версиях Slick

Вы должны были сказать, что конкретный столбец не является нулевым, явно передавая O.NotNull в объявлении столбца, но его не требуется в новой версии скользкого

+0

Спасибо. Я понял это. У меня также были проблемы, потому что я забыл изменить тип данных в моем классе case. У меня это работает :) –