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

92

我正在尝试在Lift/Record/Squeryl中创建一个类似于LiftMapper中的MappedEnumListEnumListField。存储类型应该是Long/BIGINT。我理解如果定义如下:

def classOfPersistentField = classOf[Long]

那么Squeryl将知道它应该创建一个BIGINT列。我知道它使用setFromAny()设置值,传入Long类型。唯一不清楚的是:

它将如何读取字段的值?如果使用valueBox,它将得到一个Seq[Enum#Value],并且不知道如何将其转换为Long。

我该如何告诉Squeryl将我的Seq[Enum#Value]转换为Long,或者定义一个返回Long的“getter”,并且不与“正常”getter(们)冲突?


1
这个链接可能会有帮助: http://stackoverflow.com/questions/12175645/squeryl-custom-field-types - Mandar Pandit
不可能的,你必须尝试其他类似于你要求的系列的方式。为此,你可以尝试使用MSDN帮助。 - SUNIL MURARKA
1个回答

1
您正在错误地实现验证逻辑。验证记录字段的正确方式是覆盖。
def validations: List[ValidationFunction]

其中ValidationFunction是一个类型别名

type ValidationFunction = ValueType => List[FieldError]

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

接下来的问题是你的Domain trait。因为你对validate的调用被内联到类定义中,所以它将在字段构造时被调用。


我已经超过5年没有使用Scala,因此也就不再熟悉Lift/Record/Squeryl了。我已经忘记了所有相关内容,所以我不再有资格判断你的答案是否正确并解决了问题。在这种情况下,我不确定Stack-Overflow应该采取什么“流程”。我会在“元”中询问... - Sebastien Diot
"Meta" 说 "等着瞧";如果你的答案得到一堆+1,那么它很可能是"正确的",我会接受它... - Sebastien Diot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接