【问题标题】:Pre-persistence validation for Scala case class using Salat/Casbah使用 Salat/Casbah 对 Scala 案例类进行持久性验证
【发布时间】:2012-10-05 15:59:51
【问题描述】:

假设我有一个使用 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 中的保存方法。有没有人有这方面的例子或知道更好的内置方法来处理与预持久性事件相关的验证?

谢谢!

【问题讨论】:

    标签: scala mongodb casbah salat


    【解决方案1】:

    Salat 开发人员在这里。

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

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

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

    【讨论】:

    • 感谢您跟进此事。一旦我更多地思考这种验证行为如何为我工作,我将很快创建一个问题。现在我正在继承 SalatDAO,我的计划是重写一些持久性函数作为一种解决方法。
    猜你喜欢
    • 2015-03-14
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-23
    • 2018-09-13
    • 1970-01-01
    相关资源
    最近更新 更多