HowTo: Benutzerdefiniertes Feld in Lift-Record-Squeryl


92

Ich versuche ein EnumListFieldin Lift / Record / Squeryl zu machen, ähnlich wie MappedEnumListin LiftMapper. Der Speichertyp sollte Long / BIGINT sein. Ich verstehe das, wenn ich definiere:

def classOfPersistentField = classOf[Long]

Dann weiß Squeryl, dass eine BIGINT-Spalte erstellt werden soll. Und ich weiß, dass es verwendet wird setFromAny(), um den Wert festzulegen, der im Long übergeben wird. Das einzige Stück, das ich nicht bekomme, ist:

Wie wird der Wert des Feldes gelesen? Wenn es verwendet wird valueBox, wird es ein bekommen Seq[Enum#Value], und es wird nicht wissen, wie man daraus ein Long macht.

Wie kann ich Squeryl anweisen, mein Seq[Enum#Value]in ein Long umzuwandeln oder einen "Getter" zu definieren, der ein Long zurückgibt und nicht mit den "normalen" Getter (n) in Konflikt steht?



Es ist nicht möglich, Sie müssen es auf eine andere Art von Serien versuchen, die Ihren Anforderungen ähnlich sind. Hierfür können Sie die MSDN-Hilfe ausprobieren.
SUNIL MURARKA

Antworten:


1

Sie implementieren Ihre Validierungslogik falsch. Die korrekte Methode zum Überprüfen eines Datensatzfelds ist das Überschreiben

def validations: List[ValidationFunction]

Dabei ist ValidationFunction ein Typalias

type ValidationFunction = ValueType => List[FieldError]

und in Ihrem Fall ValueType == String.

Das nächste Problem ist Ihr Domain-Merkmal. Da Ihr Aufruf zur Validierung in die Klassendefinition eingebettet ist, wird er aufgerufen, wenn Ihr Feld erstellt wird.


Ich habe Scala und damit Lift / Record / Squeryl seit über 5 Jahren nicht mehr benutzt. Ich habe alles vergessen und bin daher nicht mehr qualifiziert zu entscheiden, ob Ihre Antwort richtig ist und das Problem löst. Ich bin mir nicht sicher, wie der "Prozess" des Stapelüberlaufs in diesem Fall aussehen soll. Ich werde in "Meta" fragen ...
Sebastien Diot

"Meta" sagte "abwarten und sehen"; Wenn Ihre Antwort eine Menge von +1 bekommt, dann ist es "wahrscheinlich richtig", und ich kann es akzeptieren ...
Sebastien Diot
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.