2009-12-10 80 views
1

所以我正在閱讀the following關於在GAE中定義您自己的屬性類型的文檔。我注意到,當擴展一個新的Property時,我還可以包含一個.validate()方法。這個驗證方法將被稱爲「在對屬性進行賦值時確保它與您指定的屬性兼容」。很公平,但究竟是什麼時候?什麼時候在Google App Engine(GAE)中運行屬性驗證?

我的問題是,這個驗證方法的確切時間被稱爲?具體來說,是在它被投入之前還是之後被調用?如果我在一個事務中創建這個實體,是在事務內部還是事務之前調用的驗證?

我知道最好每個屬性應該是「自包含」或至多,它應該只處理實體所處的狀態。但是,如果您在驗證方法中執行了查詢,會發生什麼情況?如果您在與您當前的交易實體組不同的實體組中進行了驗證,那麼它會爆炸嗎?

回答

2

分別在交易之前和交易過程中(如果驗證失敗,可能會中止交易)。當你寫入theentity.theproperty = somevalue(或者當你隱含地執行它)時,「向你的實體的某個屬性做出任務」。我相信,在交易過程中(無論是否驗證),無關實體的查詢都是非事務性的(因此非常不切實際),但不禁止 - 但最後一點我不確定。