2012-10-05 23 views
1

假設我有一個使用Salat/Casbah/Mongo堆棧持久化的Scala案例類,我想設置預先持久性驗證邏輯,就像我可以輕鬆做到的在Rails中使用ActiveRecord鉤子或在Java中使用JSR 303 bean驗證。使用Salat/Casbah的Scala案例類的持續前驗證

或許有思考這個在功能模式更好的辦法,但我要完成像下面這樣:

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

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

我無法找到如何做這樣的事情的任何文件在薩拉特。我看到@Persist註釋,但它似乎專注於序列化特定值並且不創建掛鉤。

看起來像一個選項是重寫SalatDAO中的保存方法爲我的案例類。有沒有人有這樣的例子,或知道更好的,內置的方式來處理與預先持久性事件相關的驗證?

謝謝!

回答

2

Salat開發人員在這裏。

是的,@Persist只是爲了確保不在構造函數中的字段被序列化 - 這對於在MongoDB中操作數據特別有用。一個例子是你想確保所有的字段都填充了一個值,這樣你就可以合理地排序,但值是Option,可能不存在。

不幸的是,Java驅動程序不提供生命週期回調像Ruby驅動程序:(

但是你想應該是很容易的事。請https://github.com/novus/salat/issues文件中的問題,並說明您希望如何驗證我們可以開始討論,我可以嘗試在1.9.2版本中爲您提供幫助。

+0

謝謝您的跟進。一旦我想到更多關於如何操作的問題,我會立即創建一個問題這個驗證行爲可以爲我工作,現在我繼承了SalatDAO,我的計劃是重寫一些持久化函數作爲解決方法。 – kgx