Von der Spitze von meinem Kopf, zwei Möglichkeiten für Sie:
1. Frontend Darstellung von Ihrem aktuellen Modell entkoppeln
Sie eine ProcessStepTemplatesClientModel
haben könnte, welches das zusätzliche Feld derived
hat und nur verwendet wird, um den JSON-Eingang in der Steuerung zu validieren. Nachdem Sie Ihre Geschäftslogik mit dem Feld derived
fertiggestellt haben, konvertieren Sie das Objekt in ProcessStepTemplatesModel
und speichern es in Ihrer Datenbank.
2. Fassen Sie das Feld in Ihrem * -Projektion Ihrer Slick Tisch
die abgeleitete Feld in Ihrer ProcessStepTemplatesModel
Klasse einschließen (vorausgesetzt, es boolean ist, funktioniert mit jedem anderen primitiven):
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)
Und da Sie als Datenbank-Mapper Slick verwenden Sie wahrscheinlich eine Tabellendarstellung für Ihre ProcessStepTemplatesModel
haben:
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))
})
}
Fügen Sie das abgeleitete Feld nicht in die Tabellendefinition ein und behandeln Sie diesen Fall innerhalb der * -Projektion, indem Sie dem Fallklassenkonstruktor einen statischen Wert übergeben, um das Objekt aus dem Tupel zu erstellen, und es beim Erstellen des Tupels auslassen Objekt.
EDIT
Als Antwort auf Ihren Kommentar, eine konkrete Umsetzung der * -Projektion, bezogen auf die ProcessStepTemplatesModel
derived
einschließlich:
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))
})
ja ich glatt bin mit. die * -Projektion sieht so aus. 'def *: ProvenShape [ProcessStepTemplatesModel] = (ID.?, Titel, Erstelldatum, Aktualisiert, Stichtag, Kommentar, Schritttyp, gelöscht, Prozesstemplate) <> ((ProcessStepTemplatesModel.apply _). tupled, ProcessStepTemplatesModel.unapply)' How würde ich den statischen Wert hinzufügen? – Felix
@Felix siehe Edit – thwiegan
danke, ich denke, nahe, aber ein Fehler immer noch postet ein Screenshot über – Felix