从电梯中的任何Mapper按名称检索字段

时间:2011-11-25 07:52:20

标签: lift mapper

我们如何从任何映射器中检索所需的字段,以便在Query参数中使用它。

在我的情况下,我想找到我的'期望字段'具有值=某个值的记录。

尝试了以下方式

foo(Users)

// foo defined here...

def foo ( modelObject:Mapper[_])={

    var field =modelObject.fieldByName("UserName").openTheBox.asInstanceOf[MappedField[_,Users]]
    var requiredUser = modelObject.find(By(field, "dummyUser")

}

但是它迫使我在asInstanceOf[MappedField[_,Users]]中指定实际的Mapper(用户实例在这里传递)。我想让它适用于任何Mapper而不仅仅是'用户'。

它不适用于asInstanceOf[MappedField[_,_]]

我知道每个Mapper可能没有我想要的字段。在这种情况下,如果.fieldByName()函数应该抛出一些异常,那么它是可以接受的。但至少对那些提起诉讼的人来说,它应该有效。

任何人都可以帮助我...

2 个答案:

答案 0 :(得分:1)

def foo[A<: Mapper[A],T](modelObject: A) = {
  val field = modelObject.asInstanceOf[Mapper[A]].fieldByName("userName").openTheBox.asInstanceOf[MappedField[T, A]]
  modelObject.asInstanceOf[MetaMapper[A]].find(By(field, "dummyUser".asInstanceOf[T])
}

打电话时可以这样做吗?

foo[Users,String](Users)

答案 1 :(得分:0)

不要使用超级方法完成所有这些操作,而不是将查找函数作为参数传递。

def foo[T](find: () => Option[T]) : Option[T] =  find()

并称之为:

foo[User](() => User.find(By(User.userName, "dummy"))