0

我正在使用 Lift Record 持久性,并且我想在设置或获取字段值时对字段应用一些转换。例如,对于 StringField,我想在 Record 对象中自动将其设置为小写。

object someField extends StringField(this, 64) {
   ...
   // how do I apply transformations here?
   ...
}

在 Lift Mapper 中有一种方法setFilter可以做到这一点,但我在 Record 中找不到它的等价物。在 Mapper 中,它看起来像这样:

object someField extends MappedString(this, 64) {
   ...
   override def setFilter = trim _ :: toUpper _ :: super.setFilter
   ...
}

我正在考虑的几个选项是:

  • overrideset方法,但其中有很多,我害怕不完全覆盖所需方法的子集,所以我无法想象后果。:)
  • 使用生命周期回调 - 似乎有点矫枉过正。

任何帮助表示赞赏。谢谢 ;)

4

1 回答 1

0

感谢@jcern 指出这一点:

Record 的方法def setFilter: List[(ValueType) ⇒ ValueType]def setFilter: List[(FieldType) ⇒ FieldType].

它的使用方式相同,即在设置或查询值时应用过滤器。这是一个简单的例子:

class Tag extends MongoRecord[Tag] with ObjectIdPk[Tag] {
  ...
  object name extends StringField(this, 32) {
    override def setFilter = trim _ :: toLower _ :: super.setFilter
  }
  ...
}

Tag.createRecord.name("UPPER")                
// lowercases tag name:
//res1: Tag = class Tag={name=upper, _id=521bb306e4b04eacd74dd217}
于 2013-08-26T22:18:58.453 回答