Ich habe Probleme herauszufinden, wie man eine Spalte mit Typ Enumeration mit Play-Slick aktualisieren.spielen Slick Aktualisierung Aufzählung Spalte
Hier ist meine Enum und Fallklasse:
object TestStatus extends Enumeration {
type TestStatus = Value
val Status1 = Value("Status1")
}
case class Test (
id: String,
status: TestStatus
)
und die Tabellenzuordnung:
class Tests(tag: Tag) extends Table[Test](tag, "tests") {
implicit val statusColumn = MappedColumnType.base[TestStatus, String](_.toString, TestStatus.withName)
override def * = (id, status) <> ((Test.apply _).tupled, Test.unapply)
val id = column[String]("id", 0.PrimaryKey)
val status = column[TestStatus]("status")
}
, wenn ich versuche, eine Prüfung Zeile zu gehen und zu aktualisieren, ich einen Fehler:
object TestQueries extends TableQuery[Tests](new Tests(_)) {
def updateStatus(id: String, newStatus: TestStatus) = {
TestQueries.filter(_.id === id).map(_.status).update(newStatus)
}
}
[error] Slick does not know how to map the given types.
[error] Possible causes: T in Table[T] does not match your * projection,
[error] you use an unsupported type in a Query (e.g. scala List),
[error] or you forgot to import a driver api into scope.
[error] Required level: slick.lifted.FlatShapeLevel
[error] Source type: slick.lifted.Rep[models.TestStatus.Value]
[error] Unpacked type: T
[error] Packed type: G
[error] TestQueries.filter(_.id === id).map(_.status).update(newStatus)
[error] ^
IntelliJ zeigt, dass TestQueries.filter(_.id === id).map(_.status)
hat Query[Nothing, Nothing, Seq]
, die mich das Problem denken ich s mit der spezifischen Spalte statt mit der Update-Funktion.
Aktualisierung der ID funktioniert gut mit der gleichen Struktur.
aussehen Es scheint, als nur 'Tests' Klasse implizite Spaltenzuordnung für' TestStatus' hat. Könnten Sie klären, ob 'TestQueries' auch eine korrekte Spaltenzuordnung im Umfang hat? Versuchen Sie den 'statusColumn'-Wert innerhalb von' TestQueries' zu kopieren und prüfen Sie, ob er kompiliert wird. – AdamBat
@AdamBat Es ist ein bisschen unklar von meinem Code, aber ich habe versucht, die Spaltenzuordnung zu verschiedenen Bereichen zu kopieren: 'TestStatus' Objektebene sowie 'TestQueries' Ebene, alle mit den gleichen Ergebnissen. – itadoatL
Könnten Sie Repository mit repliziertem Problem bereitstellen? Ich habe Ihren Code ad hoc kopiert und den gleichen Compilerfehler erhalten. Das Duplizieren der 'TestStatus'-Spaltenzuordnung in' TestQueries', wie ich es im obigen Kommentar vorgeschlagen habe, half dabei, das Problem zu lösen. Hier ist mein Kern, der zeigt, was ich genau gemacht habe: https://gist.github.com/Dasiu/ae4fa9bfa9077569e5e07a02aa1493f0 – AdamBat