hibernate 對象爲何須要實現 Serializable接口

注意區分持久化和序列化,持久化是把對象中的信息轉換爲數據庫中的表來存儲;序列化是將對象(java對象)直接變成字符串等流,存儲到硬盤上,不涉及數據庫表。java

序列化的目的主要是方便直接傳輸對象,而不是每次都要鏈接數據庫表。數據庫

hibernate 有兩種緩存。其中,一級緩存爲 session級別,一般由內存管理。二級緩存是 sessionFactory級別,存儲介質能夠是內存或硬盤。對於二級緩存,若是將對象寫進硬盤,就必須序列化,以及兼容對象在網絡中的傳輸 等等。緩存

java中常見的幾個類(如:Interger、String等),都實現了java.io.Serializable接口。服務器

實現 java.io.Serializable 接口的類是可序列化的。沒有實現此接口的類將不能使它們的任一狀態被序列化或逆序列化。序列化類的全部子類自己都是可序列化的。這個序列化接口沒有任何方法和域,僅用於標識序列化的語意。網絡

確切的說應該是對象的序列化,通常程序在運行時,產生對象,這些對象隨着程序的中止運行而消失,但若是咱們想把某些對象(由於是對象,因此有各自 不一樣的特性)保存下來,在程序終止運行後,這些對象仍然存在,能夠在程序再次運行時讀取這些對象的值,或者在其餘程序中利用這些保存下來的對象。這種狀況 下就要用到對象的序列化。session

只有序列化的對象才能夠存儲在存儲設備上。爲了對象的序列化而須要繼承的接口也只是一個象徵性的接口而已,也就是說繼承這個接口說明這個對象能夠 被序列化了,沒有其餘的目的。之因此須要對象序列化,是由於有時候對象須要在網絡上傳輸,傳輸的時候須要這種序列化處理,從服務器硬盤上把序列化的對象取 出,而後經過網絡傳到客戶端,再由客戶端把序列化的對象讀入內存,執行相應的處理。分佈式

將二級緩存中的內容持久化保存下來,便於恢復緩存的信息,hibernate的緩存機制經過使用序列化,判定應該是基於序列化的緩存,如沒有 serializable接口,在序列化時,使用objectOutputStream的write(object)方法將對象保存到文件時將會出現異常。.net

Hibernate並不要求持久化類必須實現Java.io.Serializable接口,可是對於採用分佈式結構的Java應用,當Java對象在不一樣的進程節點之間傳輸時,這個對象所屬的類必須實現Serializable接口,此外,在Java Web應用中,若是但願對HttpSession中存放的Java對象進行持久化,那麼這個Java對象所屬的類也必須實現Serializable接口。hibernate

相關文章
相關標籤/搜索