2014-01-27 58 views
0

我有一個使用GORM的grails項目。HibernateEventListeners沒有捕獲事件

我需要使用hibernates事件監聽器後插入事件。這裏是我

class PersistenceListener implements PostInsertEventListener { 

@Override 
void onPostInsert(PostInsertEvent postInsertEvent) { 
    println("postInsert") 
    println(postInsertEvent) 
    println(postInsertEvent.entity) 
} 

這裏是我的resources.xml中: 豆= {

persistenceListener(PersistenceListener) 

hibernateEventListeners(HibernateEventListeners) { 
    listenerMap = ['post-insert': persistenceListener] 
} 

}

我有兩個數據存儲。一個是使用mysql,另一個是使用mongodb。奇怪的是,監聽器正在捕獲去往mysql的事件,但沒有捕獲到mongodb事件。我不知道爲什麼。任何人都可以解釋這個問題?也許是因爲我有兩個數據存儲?

+2

我可能會誤解,但我相當肯定GORM不使用hibernate作爲mongodb – rcgeorge23

+0

真的嗎?在調用Domain.save()時,兩者之間必須有什麼東西? – Travis

+0

嗯,我想當你調用Domain.save()時,它是mongo插件,它將數據保存到mongodb中。 [docs](http://springsource.github.io/grails-data-mapping/mongo/manual/guide/1.%20Introduction.html#1.1%20Compatibility%20with%20GORM%20for%20Hibernate)似乎表明:他們試圖提供一個與gorm/hibernate api一致的API,但實際上並沒有進行休眠。 – rcgeorge23

回答

1

格姆不使用Hibernate來跟MongoDB的,所以很遺憾,你將無法使用Hibernate的事件監聽器API掛接到MongoDB的持久性事件。

another stackoverflow question here演示如何註冊任意GORM事件的偵聽器。也許你可以嘗試這樣的事情?

0

您是否嘗試過使用GORM events代替?例如:

class YourDomainClass { 

    def afterInsert() { 
    // stuff to do after saving a new instance goes here 
    } 
} 
+0

你的問題是afterInsert事件。我正在處理歸檔函數,並需要對afterInsert塊中新插入的對象進行查找。問題在於,當調用afterInsert時,對象不在數據庫中。因此,我正在檢查hibernate事件,看看它是否可以在那裏完成。 – Travis

+0

根據名稱,我期望在調用'afterInsert'的時候持久化該對象。如果你想跟蹤插入/更新/刪除到域類,你可能會發現使用審計日誌插件更簡單的方法:http://grails.org/plugin/audit-logging –

+0

正如我..afterInsert被稱爲是保存交易。在事務完成之前,數據庫中不會找到該對象。所以沒有喜悅:( – Travis