如何:Lift-Record-Squeryl中的自定义字段

时间:2011-04-17 11:40:39

标签: scala lift record squeryl

我正在尝试在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冲突?

1 个答案:

答案 0 :(得分:1)

您正在错误地实施验证逻辑。验证记录字段的正确方法是覆盖

def validations: List[ValidationFunction]

其中ValidationFunction是类型别名

type ValidationFunction = ValueType => List[FieldError]

在您的情况下,ValueType == String。

下一个问题是你的领域特质。因为您对validate的调用被内联到类定义中,所以在构造字段时将调用它。