HowTo: настраиваемое поле в Lift-Record-Squeryl

92

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

def classOfPersistentField = classOf[Long]

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

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

Как мне сказать Squeryl преобразовать my Seq[Enum#Value]в Long или определить «геттер», который возвращает Long, и который не конфликтует с «обычными» геттерами?

Себастьян Диот
источник
1
Эта ссылка может помочь: stackoverflow.com/questions/12175645/squeryl-custom-field-types
Mandar Pandit
это невозможно, вы должны попробовать другой способ серии, который похож на ваши требования. для этого вы можете попробовать помощь MSDN.
СУНИЛ МУРАРКА

Ответы:

1

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

def validations: List[ValidationFunction]

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

type ValidationFunction = ValueType => List[FieldError]

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

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

Gucci
источник
Я не использовал Scala и, следовательно, Lift / Record / Squeryl более 5 лет. Я отказался от всего этого, и поэтому я больше не имею права решать, правильный ли ваш ответ и решает ли проблему. Я не уверен, каким должен быть «процесс» переполнения стека в этом случае. Я спрошу в «мета» ...
Себастьян Диот
«Мета» сказала «подожди и посмотри»; если ваш ответ набирает кучу +1, то это "вероятно, верно", и я могу принять его ...
Себастьян Диот