HowTo: Custom Field in Lift-Record-Squeryl

92

Próbuję zrobić EnumListFieldw Lift / Record / Squeryl, podobnie jak MappedEnumListw LiftMapper. Typ przechowywania powinien być Long / BIGINT. Rozumiem, że jeśli zdefiniuję:

def classOfPersistentField = classOf[Long]

Wtedy Squeryl będzie wiedział, że powinien utworzyć kolumnę BIGINT. I wiem, że używa setFromAny()do ustawiania wartości, przekazując Long. Jedyny element, którego nie dostaję, to:

Jak odczyta wartość pola? Jeśli użyje valueBox, otrzyma Seq[Enum#Value]i nie będzie wiedział, jak zmienić to w Long.

Jak powiedzieć Squeryl, aby zamieniła mój Seq[Enum#Value]na Long, lub zdefiniować „getter”, który zwraca Long i który nie powoduje konfliktu z „normalnymi” metodami pobierającymi?

Sebastien Diot
źródło
nie jest to możliwe, musisz spróbować innego sposobu serii, które są podobne do twoich wymagań. w tym celu możesz skorzystać z pomocy MSDN.
SUNIL MURARKA

Odpowiedzi:

1

nieprawidłowo implementujesz logikę walidacji. Prawidłowym sposobem sprawdzenia poprawności pola rekordu jest przesłonięcie

def validations: List[ValidationFunction]

gdzie ValidationFunction jest aliasem typu

type ValidationFunction = ValueType => List[FieldError]

aw twoim przypadku ValueType == String.

Następnym problemem jest cecha domeny. Ponieważ wywołanie walidacji jest wbudowane w definicję klasy, zostanie wywołane podczas konstruowania pola.

Gucci
źródło
Nie używałem Scali, a więc Lift / Record / Squeryl od ponad 5 lat. Zapomniałem o tym, więc nie mam już kwalifikacji, aby zdecydować, czy Twoja odpowiedź jest prawidłowa i rozwiązuje problem. Nie jestem pewien, jaki powinien być „proces” przepełnienia stosu w tym przypadku. Zapytam w "meta" ...
Sebastien Diot
„Meta” powiedział „poczekaj i zobacz”; jeśli Twoja odpowiedź dostanie kilka +1, to jest „prawdopodobnie poprawna” i mogę to zaakceptować ...
Sebastien Diot