使用Salat / Casbah对Scala案例类进行预持久性验证

时间:2012-10-05 15:59:52

标签: scala mongodb casbah salat

假设我有一个使用Salat / Casbah / Mongo堆栈持久化的Scala案例类,我想设置预持久性验证逻辑,就像我可以使用ActiveRecord挂钩在Rails中轻松完成,或者使用JSR 303 bean在Java中设置验证

也许在功能范例中有更好的方式来考虑这个问题,但我想完成以下内容:

case class SomeItem(
  id: ObjectId = new ObjectId,
  someProperty: String) {

  @PrePersistence
  def validate() = {
     //perform some logic
     //fail document save in certain conditions
  }
}

我很难找到有关如何在Salat做类似事情的任何文档。我确实看到了@Persist注释,但它似乎专注于序列化特定值而不是创建钩子。

似乎有一个选项是覆盖我的案例类SalatDAO中的save方法。有没有人有这样的例子或者知道更好的内置方法来处理与预持久性事件相关的验证?

谢谢!

1 个答案:

答案 0 :(得分:2)

Salat开发人员。

是的,@Persist只是为了确保构造函数中没有的字段被序列化 - 这对于操作MongoDB中的数据特别有用。一个示例是您希望确保所有字段都使用值填充,以便您可以合理地进行排序,但值为Option,可能不存在。

不幸的是,Java驱动程序不提供像Ruby驱动程序那样的生命周期回调:(

但是你想要的东西应该很容易做到。请在https://github.com/novus/salat/issues提交一个问题,并说明您希望验证的行为方式 - 我们可以开始讨论,我可以尝试在1.9.2版本中为您提供一些内容。