HowTo: Custom Field in Lift-Record-Squeryl
I'm trying to make a EnumListField
in Lift/Record/Squeryl, similar to MappedEnumList
in LiftMapper
. The storage type should be Long/BIGINT. I understand that if I define:
def classOfPersistentField = classOf[Long]
Then Squeryl will know it should create a BIGINT column. And I know it uses setFromAny()
to set the value, passing in the Long. The one piece I don't get is:
How will it read the field's value? If it uses valueBox
, it will get a Seq[Enum#Value]
, and it won't know how to 开发者_JAVA技巧turn that into a Long.
How do I tell Squeryl to convert my Seq[Enum#Value]
to a Long, or define a "getter" that returns a Long, and that doesn't conflict with the "normal" getter(s)?
you are implementing your validation logic incorrectly. The correct way to validate a Record field is to override
def validations: List[ValidationFunction]
where ValidationFunction is a type alias
type ValidationFunction = ValueType => List[FieldError]
and in your case ValueType == String.
The next issue is your Domain trait. Because your call to validate is inlined into the class definition, it will be called when your field is constructed.
精彩评论