2009-06-24 31 views
5

您實現的Hibernate接口提供事件偵聽器,例如:org.hibernate.event.PostInsertEventListener;都可以擴展Serializable。爲什麼Hibernate Serializable中的生命週期偵聽器?

但是,它似乎沒有解釋爲什麼你的聽衆需要可序列化。我們已經將DAO與數據庫連接注入了它們一段時間,並且它還沒有失敗,但是我擔心Hibernate可能會通過串行化鏈接傳遞監聽器,所以會丟失數據庫連接。

所以問題是:爲什麼hibernate事件監聽器必須是可序列化的?

回答

2

儘管我不確定我是否正確理解您的問題,但我不知道可序列化事件偵聽器的問題可能是什麼。

一個事件監聽器必須被實現,就好像它是一個單例一樣,它們不應該在實例變量中保存任何狀態。

所以序列化不應該是一個問題。

DAO無法序列化(出於顯而易見的原因)。

如果你確實有一個DAO引用的事件監聽器,請將DAO實例變量標記爲transient。當您使用DAO檢查null,並且如果null從DAOFactory獲取appropratie DAO。

+0

這很有道理,而且是一個很好的解決方法。我想知道爲什麼它被標記爲這樣 - Hibernate是否實際序列化它們。 另外,我們並沒有真正擁有DAOFactory,因爲我們使用Spring來注入它們。 – davidsheldon 2009-06-24 10:49:00

相關問題