我正在尝试在Lift / Record / Squeryl中制作EnumListField
,类似于MappedEnumList
中的LiftMapper
。存储类型应为Long / BIGINT。我明白,如果我定义:
def classOfPersistentField = classOf[Long]
然后Squeryl会知道它应该创建一个BIGINT列。我知道它使用setFromAny()
设置值,传入Long。我得不到的一件是:
它将如何读取该字段的值?如果它使用valueBox
,它将获得Seq[Enum#Value]
,并且它将不知道如何将其转换为Long。
如何告诉Squeryl将我的Seq[Enum#Value]
转换为Long,或者定义一个返回Long的“getter”,并且不与“普通”getter冲突?
答案 0 :(得分:1)
您正在错误地实施验证逻辑。验证记录字段的正确方法是覆盖
def validations: List[ValidationFunction]
其中ValidationFunction是类型别名
type ValidationFunction = ValueType => List[FieldError]
在您的情况下,ValueType == String。
下一个问题是你的领域特质。因为您对validate的调用被内联到类定义中,所以在构造字段时将调用它。