從我的頭頂,兩個選項爲您提供:
1.從您的實際模型解耦前端表示
你可以有一個ProcessStepTemplatesClientModel
,它具有額外的字段derived
,僅用於驗證控制器中的JSON輸入。完成涉及derived
字段的業務邏輯後,將該對象轉換爲ProcessStepTemplatesModel
並將其保存在數據庫中。
2.處理您油滑表你* -projection領域
包括在你ProcessStepTemplatesModel
類派生場(假設它是布爾值,與任何其他原始作品):
case class ProcessStepTemplatesModel(
id: Option[Int],
title: String,
createdat: String,
updatedat: String,
deadline: Option[Date],
comment: Option[String],
stepType: Int,
deleted: Boolean,
processtemplate: Option[Int],
derived: Boolean)
而且因爲你爲你的數據庫映射器使用油滑的,你可能有你的ProcessStepTemplatesModel
表表示:
class ProcessStepTemplatesModelTable(tag: Tag) extends Table[ProcessTableTemplatesModel](tag, "PROCESS_TABLE_TEMPLATES_MODEL") {
def id = column[Int]("ID", O.PrimaryKey, O.AutoInc)
...
def processtemplate = column[Option[Int]]("PROCESSTEMPLATE")
def * = (id, ..., processtemplate) <> ({
tuple: (Int, ..., Option[Int]) => ProcessStepTemplatesModel(tuple._1, ..., tuple._9, derived = false)
}, {
ps: ProcessStepTemplatesModel => Some((ps.id, ..., ps.processtemplate))
})
}
不要在表定義中包含派生字段,並在* -projection中處理該案例,方法是將靜態值傳遞給案例類構造函數,以從元組創建對象,並在創建元組目的。
編輯
至於您的評論的迴應,更具體的實施* -projection的基礎上,ProcessStepTemplatesModel
包括derived
:
def * : ProvenShape[ProcessStepTemplatesModel] = (id.?, title, createdat, updatedat, deadline, comment, stepType, deleted, processtemplate) <> ({
tuple: (Option[Int], String, String, String, Option[Data], Option[String], Int, Boolean, Option[Int]) => ProcessStepTemplatesModel(tuple._1, tuple._2, tuple._3, tuple._4, tuple._5, tuple._6, tuple._7, tuple._8, tuple._9, derived = false)
}, {
ps: ProcessStepTemplatesModel => Some((ps.id, ps.title, ps.createdat, ps.updatedat, ps.deadline, ps.comment, ps.stepType, ps.deleted, ps.processtemplate))
})
是我使用的是光滑。 *投影看起來像這樣。 'def *:ProvenShape [ProcessStepTemplatesModel] =(id。?,title,createdat,updatedat,deadline,comment,stepType,deleted,processtemplate)<>((ProcessStepTemplatesModel.apply _)。tupled,ProcessStepTemplatesModel.unapply) How我會添加靜態值嗎? – Felix
@Felix請參閱編輯 – thwiegan
謝謝,我認爲關閉但仍然留下一個錯誤屏幕上方 – Felix