Как заставить 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)