私は、Scalaでは、次のコードを持っている:すべての製品をリストスカラ&プレイ! &スリック&PostgreSQLの自動インクリメント
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)
私はそのidはnullにすることはできませんと言ってはPostgreSQLのエラーメッセージが表示されますconstanty。私はそれに完全に同意しますが、なぜidカラムがautoIncによって設定されていないのですか?そんなにうまくいきませんか?
私はPlay!を使用します。 2.1.2、Scala 2.10.0、PostgreSQL 9.3、およびplay-slick 0.3.3をサポートしています。
ありがとうございます。
def autoInc = name ~ price ~ description returning id
def add(product: Product)(implicit s:Session): Long = {
Products.autoInc.insert(p.name, p.price, p.description)
}
あなたが自動増分列にnullを挿入することができown'tいくつかのデータベース:ここ
あなたのスキーマは何ですか?それは滑らかか手で作られましたか?おそらく、idカラムは、タイプserialまたはbigserialである必要があります。実際にはint型またはbigint型になりますが、デフォルト値はnextval( 'product_id_seq')に設定され、自動的にそのシーケンスが作成されます。 – Tim
これはSlickによって自動的に作成されます: 'create table" product "(" id "SERIAL NOT NULL PRIMARY KEY、name" VARCHAR(254)NOT NULL "、" DECIMAL(21,2)NOT NULL "、description" VARCHAR (254)NOT NULL); '。私はそれが既にSERIALだと思うが、コードはうまくいかない:( – oskario