Я пытаюсь сделать EnumListField
в Lift / Record / Squeryl аналогично MappedEnumList
in LiftMapper
. Тип хранилища должен быть Long / BIGINT. Я понимаю, что если я определю:
def classOfPersistentField = classOf[Long]
Тогда Squeryl будет знать, что он должен создать столбец BIGINT. И я знаю, что он используется setFromAny()
для установки значения, передавая Long. Единственное, что мне не досталось:
Как он прочитает значение поля? Если он использует valueBox
, он получит Seq[Enum#Value]
, и он не будет знать, как превратить его в Long.
Как мне сказать Squeryl преобразовать my Seq[Enum#Value]
в Long или определить «геттер», который возвращает Long, и который не конфликтует с «обычными» геттерами?
Ответы:
вы неправильно реализуете свою логику проверки. Правильный способ проверки поля записи - переопределить
def validations: List[ValidationFunction]
где ValidationFunction - псевдоним типа
type ValidationFunction = ValueType => List[FieldError]
и в вашем случае ValueType == String.
Следующая проблема - это черта вашего домена. Поскольку ваш вызов для проверки встроен в определение класса, он будет вызываться при создании вашего поля.
источник