Ich versuche ein EnumListField
in Lift / Record / Squeryl zu machen, ähnlich wie MappedEnumList
in 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?
Antworten:
Sie implementieren Ihre Validierungslogik falsch. Die korrekte Methode zum Überprüfen eines Datensatzfelds ist das Überschreiben
Dabei ist ValidationFunction ein Typalias
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.
quelle