我在 Scala 中有以下代码:
case class Product(id: Option[Long] = None, name: String, price: BigDecimal, description: String)
object Products extends Table[Product]("product") {
def id = column[Long]("id", O.AutoInc, O.PrimaryKey)
def name = column[String]("name", O.NotNull)
def price = column[BigDecimal]("price", O.NotNull)
def description = column[String]("description", O.NotNull)
def * = id.? ~ name ~ price ~ description <>(Product.apply _, Product.unapply _)
def autoInc = * returning id
def add(product: Product)(implicit s:Session): Long = {
Products.autoInc.insert(product)
}
def all(implicit s:Session): List[Product] = {
Query(Products).list
}
}
列出所有产品效果很好,但是,我无法使添加方法起作用。
调用后:
val myProduct = models.Product(id = None, name = "test2", price = BigDecimal(2.99), description = "test3")
models.Products.add(myProduct)
我经常从 PostgreSQL 收到一条错误消息,说 id 不能为空。我完全同意这一点,但为什么 autoInc 没有设置 id 列?它不是那样工作的吗?
我用玩!2.1.2、Scala 2.10.0、PostgreSQL 9.3 和 play-slick 0.3.3。
提前致谢。