Проверка перед сохранением для класса дел 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,