Как заставить Slick соблюдать настройки столбца БД по умолчанию при вставке?

Я использую Slick 3.2 с codegen в приложении Scala Play с Postgres DB. Каждая из моих таблиц имеет поле метки времени для create_time следующего типа: TIMESTAMP default (now() at time zone 'utc'), Проблема, с которой я сталкиваюсь, заключается в том, что Slick генерирует поле модели как createTimestamp: Option[java.sql.Timestamp], а затем вставляет явный null для этого столбца, когда createTimestamp None, Я бы хотел, чтобы поведение вместо этого вообще исключало значение из оператора вставки, чтобы БД использовала его по умолчанию. Есть ли способ сделать это?

1 ответ

Решение

Вы можете попробовать что-то вроде следующего:

Чтобы вставить объект

class YourModel(id: Option[Long], name: String, someOtherField: String, createdAt: Option[Timestamp])

без предоставления идентификатора и отметки времени вообще:

val table = TableQuery[YourModelTable]

db.run( table.map( t => (t.name, t.someOtherField) ) += ("MyName", "MyOtherField") )

Я нашел обходной путь, когда вы укажете, что этот столбец - AutoInc, он будет пропущен при вставке, и вместо этого будет применено значение по умолчанию

   def createdAt = column[Instant]("created_at", O.AutoInc)
Другие вопросы по тегам