私の進化の 1 つには、BIGSERIAL
列を持つ非常に単純なテーブル定義が含まれています。
CREATE TABLE product (
id BIGSERIAL NOT NULL PRIMARY KEY,
name VARCHAR NOT NULL,
color VARCHAR NOT NULL
);
SlickCodeGenerator
データベース自体からクラスを生成するために使用します。
case class ProductRow(id: Long, name: String, color: String)
implicit def GetResultProductRow(implicit e0: GR[Long], e1: GR[String]): GR[ProductRow] = GR{
prs => import prs._
ProductRow.tupled((<<[Long], <<[String], <<[String]))
}
class Product(_tableTag: Tag) extends Table[ProductRow](_tableTag, "product") {
def * = (id, name, color) <> (ProductRow.tupled, ProductRow.unapply)
def ? = (Rep.Some(id), Rep.Some(name), Rep.Some(color)).shaped.<>({r=>import r._; _1.map(_=> ProductRow.tupled((_1.get, _2.get, _3.get)))}, (_:Any) => throw new Exception("Inserting into ? projection not supported."))
val id: Rep[Long] = column[Long]("id", O.AutoInc, O.PrimaryKey)
val name: Rep[String] = column[String]("name")
val color: Rep[String] = column[String]("color")
}
lazy val Product = new TableQuery(tag => new Product(tag))
Product
データベースによって生成されるように、IDなしでテーブルに行を挿入したいと思います。問題はProductRow.id
オプションではないことです。ほとんどの解決策は、クラスに新しいメソッドを追加することを提案していますが、変更がいつでも失われる可能性があるため、Product
によって生成されたソースには触れないでください。slick
そのような生成されたファイルを使用して ID なしで行を挿入する方法はありますか?
私は、を使用Slick 3.0
しPlayframework 2.4.1
ます。
編集:ダミーIDを送信すると問題は解決しますが、ネットワーク上では冗長です。私は次のようなものを探しています: insert into product(name, color) values('name', 'color')
.