HowTo: campo personalizzato in Lift-Record-Squeryl


92

Sto provando a fare un EnumListFieldin Lift / Record / Squeryl, simile a MappedEnumListin LiftMapper. Il tipo di archiviazione dovrebbe essere Long / BIGINT. Capisco che se definisco:

def classOfPersistentField = classOf[Long]

Quindi Squeryl saprà che dovrebbe creare una colonna BIGINT. E so che usa setFromAny()per impostare il valore, passando nel Long. L'unico pezzo che non ricevo è:

Come leggerà il valore del campo? Se usa valueBox, otterrà un Seq[Enum#Value]e non saprà come trasformarlo in un Long.

Come faccio a dire a Squeryl di convertire il mio Seq[Enum#Value]in un Long, o definire un "getter" che restituisce un Long, e che non è in conflitto con i getter "normali"?



non è possibile, devi provare in un altro modo di serie che sono proprio simili alle tue esigenze. per questo puoi provare la guida di MSDN.
SUNIL MURARKA

Risposte:


1

stai implementando la tua logica di convalida in modo errato. Il modo corretto per convalidare un campo Record consiste nell'override

def validations: List[ValidationFunction]

dove ValidationFunction è un alias di tipo

type ValidationFunction = ValueType => List[FieldError]

e nel tuo caso ValueType == String.

Il prossimo problema è il tuo tratto di dominio. Poiché la chiamata alla convalida è incorporata nella definizione della classe, verrà chiamata quando il campo viene costruito.


Non uso Scala, e quindi Lift / Record / Squeryl, da oltre 5 anni. Ho dimenticato tutto e quindi non sono più qualificato per decidere se la tua risposta è corretta e risolve il problema. Non sono sicuro di quale dovrebbe essere il "processo" Stack-Overflow in questo caso. Chiederò in "meta" ...
Sebastien Diot

"Meta" ha detto "aspetta e guarda"; se la tua risposta ottiene un mucchio di +1, allora è "probabilmente giusto", e posso accettarlo ...
Sebastien Diot
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.