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


92

我正在尝试EnumListField在Lift / Record / Squeryl中创建一个,类似于MappedEnumListLiftMapper。存储类型应为Long / BIGINT。我了解,如果我定义:

def classOfPersistentField = classOf[Long]

然后,Squeryl将知道它应该创建一个BIGINT列。而且我知道它用于setFromAny()设置值,传入Long。我没有得到的一件是:

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

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



这是不可能的,您必须尝试其他系列的方式,就像您的要求类似。为此,您可以尝试MSDN帮助。
SUNIL MURARKA'May

Answers:


1

您执行的验证逻辑不正确。验证记录字段的正确方法是覆盖

def validations: List[ValidationFunction]

其中ValidationFunction是类型别名

type ValidationFunction = ValueType => List[FieldError]

和您的情况下ValueType == String。

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


我已经5年没有使用Scala了,因此没有使用Lift / Record / Squeryl。我已经放弃了所有这些,所以我不再有资格决定您的答案是否正确并解决了问题。我不确定在这种情况下应该是什么堆栈溢出“进程”。我会在“ meta”中提问...
Sebastien Diot

“元”说“拭目以待”;如果您的答案得到一堆+1,那么它“可能是正确的”,我可以接受...
Sebastien Diot
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.