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