【发布时间】:2014-04-09 08:00:55
【问题描述】:
我有一个模型:
case class MyModel(
id: Pk[Long] = NotAssigned,
startsAt: Option[DateTime] = None,
addedAt: Option[DateTime] = None
)
object MyModel {
// .....................
SQL("""
INSERT INTO my_table(starts_at)
VALUES ({startsAt})
"""
).on('startsAt -> newItem.startsAt).executeInsert()
}
startst_at 和 added_at 在 Postgresql 中的默认值为 now(),并且不允许在其中包含空值。它不会对addedAt 造成任何错误(因为我从不将它从客户端传递给服务器),但如果在newItem.startsAt 中未指定它,它确实会导致startsAt 的错误,因此等于@ 987654328@,因此,它被传递为null。
org.postgresql.util.PSQLException: ERROR: null value in column "starts_at" violates not-null constraint
我想要的是能够在任何时候指定startsAt 并将其传递给服务器,这意味着如果我指定它,那么该值应该传递给服务器,如果不是 - 什么都没有 应该被传递并且服务器应该使用它的默认值 now()。我不想在客户端指定默认值,因为它已经在服务器的 db 级别设置了。
【问题讨论】:
-
我不确定,但我认为唯一的解决方案是
startsAt match { case Some(s) => "insert with {s}" case None => "insert without {s}" }。Anorm是一个简单的 JDBC 包装器。我怀疑你可以调整它不发送空字段 -
@serejja,是的,我认为你是对的。
标签: postgresql scala playframework playframework-2.2 anorm