【发布时间】:2015-07-03 10:15:54
【问题描述】:
我的一个演变包含一个非常简单的表定义,带有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').
【问题讨论】:
标签: scala playframework slick playframework-evolutions