Проверка перед сохранением для класса дел Scala с использованием Salat/Casbah

Предполагая, что у меня есть класс дел Scala, который сохраняется с использованием стека Salat/Casbah/Mongo, я хочу настроить логику проверки перед сохранением, как я мог бы легко сделать в Rails, используя перехватчики ActiveRecord, или в Java, используя проверку bean-компонента JSR 303.

Возможно, есть лучший способ думать об этом в функциональной парадигме, но я хочу сделать что-то вроде следующего:

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

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

У меня проблемы с поиском документации о том, как сделать что-то подобное в Салате. Я вижу аннотацию @Persist, но, кажется, она сосредоточена на сериализации определенных значений, а не на создании хуков.

Кажется, что один из вариантов - переопределить метод save в SalatDAO для моего класса case. Кто-нибудь имеет пример этого или знает лучший, встроенный способ обработки проверки, привязанной к событию перед сохранением?

Спасибо!

1 ответ

Решение

Салат разработчик здесь.

Да, @Persist просто для того, чтобы убедиться, что поля, не входящие в конструктор, сериализованы - это особенно полезно для манипулирования данными в MongoDB. Одним из примеров является то, где вы хотите убедиться, что все поля заполнены значением, чтобы вы могли разумно отсортировать, но значение Option который может не присутствовать.

К сожалению, драйвер Java не предлагает обратных вызовов жизненного цикла, таких как драйвер Ruby:(

Но то, что вы хотите, должно быть достаточно легко сделать. Пожалуйста, отправьте вопрос по адресу https://github.com/novus/salat/issues и опишите, как вы хотите, чтобы валидация велась - мы можем начать обсуждение, и я могу попытаться кое-что для вас сделать в выпуске 1.9.2,

Другие вопросы по тегам