0
我最近不得不将项目从MySQL迁移到MSSQL。我在我的表的id列上使用IDENTITY(1,1)
来匹配MySQL的自动递增功能。Slick MSSQL插入对象自动增量
当我尝试虽然插入的对象,我得到这个错误:
[SQLServerException: Cannot insert explicit value for identity column in table 'categories' when IDENTITY_INSERT is set to OFF.]
现在经过一番研究,我发现,那是因为我试图插入值,我的ID(0 )在我的桌子上。因此,例如我有一个对象类别
case class Category(
id: Long = 0L,
name: String
)
object Category extends Table[Category]("categories"){
def name = column[String]("name", O.NotNull)
def id = column[Long]("id", O.PrimaryKey, O.AutoInc)
def * = id ~ name <> (Category.apply _, Category.unapply _)
def add(model:Category) = withSession{ implicit session =>
Category.insert(model)
}
def remove(id:Long) = withSession{implicit session =>
try{Some(Query(Category).filter(_.id === id).delete)}
catch{case _ => None}
}
}
是否有插入我的对象到数据库中,而忽略不0L抛出MSSQL一个SQLException的方法吗? MySQL会忽略该id的值,并执行增量,因为它没有收到id。 我真的不想创建一个新的案例类,除了id之外的所有东西。
最我的对象至少有6个字段,那么有没有一种方法可以在不重写所有字段的情况下进行此投影?重写除一个字段以外的所有内容似乎很不雅观。因为如果我想添加一个字段,它必须在多个地方。 – kingdamian42
@ kingdamian42,我添加了更多的代码,有两个以上的字段。我希望这是你正在寻找的。 – cmbaxter
是的,谢谢,这是关于我所提出的。我只是希望有一种方法,我不需要做太多的硬编码。因为现在如果我想添加一些东西,我必须将它添加到case类中,在对象中添加def,将它添加到*,将其添加到forInsert,并将其添加到数据库。这只是很多补充,你会认为它可以合并成一个点。我想现在不得不这样做,谢谢。 – kingdamian42