Как: Пользовательское поле в Lift-Record-Squeryl - PullRequest
92 голосов
/ 17 апреля 2011

Я пытаюсь сделать EnumListField в Lift / Record / Squeryl, аналогично MappedEnumList в LiftMapper. Тип хранения должен быть Long / BIGINT. Я понимаю, что если я определю:

def classOfPersistentField = classOf[Long]

Тогда Скверил узнает, что он должен создать столбец BIGINT. И я знаю, что он использует setFromAny() для установки значения, передавая Long. Один кусок, который я не получаю:

Как он будет читать значение поля? Если он использует valueBox, он получит Seq[Enum#Value], и он не будет знать, как превратить это в Long.

Как мне сказать Squeryl преобразовать мой Seq[Enum#Value] в Long или определить «getter», который возвращает Long, и который не конфликтует с «normal» get (s)?

1 Ответ

1 голос
/ 14 марта 2018

вы неправильно внедрили логику проверки.Правильный способ проверки поля записи - переопределить

def validations: List[ValidationFunction]

, где ValidationFunction - псевдоним типа

type ValidationFunction = ValueType => List[FieldError]

, а в вашем случае ValueType == String.

Следующая проблема - ваша черта Домена.Поскольку ваш вызов validate встроен в определение класса, он будет вызван при создании вашего поля.

...