HowTo: Користувацьке поле в Lift-Record-Squeryl


92

Я намагаюся зробити EnumListFieldліфт / запису / Squeryl, аналогічно MappedEnumListв LiftMapper. Тип зберігання повинен бути Long / BIGINT. Я розумію, що якщо визначу:

def classOfPersistentField = classOf[Long]

Тоді Squeryl дізнається, що він повинен створити стовпець BIGINT. І я знаю, що він використовує setFromAny()для встановлення значення, передаючи Лонг. Я не отримую шматок:

Як він буде читати значення поля? Якщо він використовує valueBox, він отримає a Seq[Enum#Value], і він не знатиме, як перетворити це на Long.

Як я можу сказати Squeryl перетворити мій Seq[Enum#Value]на Long, або визначити "геттер", який повертає Long, і який не суперечить "нормальному" геттеру (им)?


1
Це посилання може допомогти: stackoverflow.com/questions/12175645/squeryl-custom-field-types
Mandar Pandit

це неможливо, вам доведеться спробувати це іншим способом серії, які точно так само схожі на ваші вимоги. для цього ви можете спробувати допомогу MSDN.
SUNIL MURARKA

Відповіді:


1

ви неправильно впроваджуєте свою логіку перевірки. Правильним способом перевірки поля Record є перевизначення

def validations: List[ValidationFunction]

де ValidationFunction - псевдонім типу

type ValidationFunction = ValueType => List[FieldError]

а у вашому випадку ValueType == String.

Наступне питання - це ваша риса домену. Оскільки ваш виклик для перевірки вбудований у визначення класу, він буде викликаний при побудові вашого поля.


Я не користувався Scala, а тому Lift / Record / Squeryl, більше 5 років. Я забув про це, і тому я більше не кваліфікований, щоб вирішити, чи правильна ваша відповідь, і вирішує проблему. Я не впевнений, яким у цьому випадку повинен бути "процес" переповнення стека. Я запитаю в "мета" ...
Себастьян Діот

"Мета" сказав "почекай і подивись"; якщо ваша відповідь отримає купу +1, то це "напевно правильно", і я можу прийняти це ...
Себастьян Діот
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.