1

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

也许有一种更好的方法可以在功能范式中考虑这一点,但我想完成类似以下的事情:

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

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

我无法找到有关如何在 Salat 中执行此类操作的任何文档。我确实看到了一个 @Persist 注释,但它似乎专注于序列化特定值而不是创建钩子。

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

谢谢!

4

1 回答 1

2

萨拉特开发商在这里。

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

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

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

于 2012-10-15T13:25:02.693 回答