假设我有一个使用Salat/Casbah/Mongo堆栈持久化的Scala case类,我想要设置预持久化验证逻辑,就像在Rails中使用ActiveRecord钩子或在Java中使用JSR303bean验证一样。
也许在函数范式中有一种更好的方式来思考这一点,但我想要完成以下内容:
case class SomeItem(
id: ObjectId = new ObjectId,
someProperty: String) {
@PrePersistence
def validate() = {
//perform some logic
//fail document save in certain conditions
}
}
我很难找到任何关于如何在Salat中做这样的事情的文档。我确实看到了一个@Persist注释,但它似乎专注于序列化特定的值,而不是创建挂钩。
似乎有一种选择是覆盖case类的SalatDAO中的save方法。有没有人有这样的例子,或者知道有一种更好的内置方法来处理与预持久化事件相关的验证?
谢谢!
发布于 2012-10-15 13:25:03
Salat开发人员在这里。
是的,@Persist
只是为了确保不在构造函数中的字段被序列化-这对于在MongoDB中操作数据特别有用。一个例子是,您希望确保所有字段都填充了一个值,以便可以合理地排序,但该值是一个可能不存在的Option
。
不幸的是,Java驱动程序不像Ruby驱动程序那样提供生命周期回调:(
但是你想要的东西应该很容易做到。请在https://github.com/novus/salat/issues上提交一个问题,并描述您希望验证如何运行-我们可以开始讨论,我可以尝试在1.9.2版本中为您提供一些内容。
https://stackoverflow.com/questions/12749927
复制相似问题