1. 程式人生 > >Hibernate的實體類中為什麼要繼承Serializable?

Hibernate的實體類中為什麼要繼承Serializable?

hibernate有二級快取,快取會將物件寫進硬碟,就必須序列化,以及相容物件在網路中的傳輸 等等。

java中常見的幾個類(如:Interger、String等),都實現了java.io.Serializable介面。

實現 java.io.Serializable 介面的類是可序列化的。沒有實現此介面的類將不能使它們的任一狀態被序列化或逆序列化。序列化類的所有子類本身都是可序列化的。這個序列化介面沒有任何方法和域,僅用於標識序列化的語意。

確切的說應該是物件的序列化,一般程式在執行時,產生物件,這些物件隨著程式的停止執行而消失,但如果我們想把某些物件(因為是物件,所以有各自 不同的特性)儲存下來,在程式終止執行後,這些物件仍然存在,可以在程式再次執行時讀取這些物件的值,或者在其他程式中利用這些儲存下來的物件。這種情況 下就要用到物件的序列化。

只有序列化的物件才可以儲存在儲存裝置上。為了物件的序列化而需要繼承的介面也只是一個象徵性的介面而已,也就是說繼承這個介面說明這個物件可以 被序列化了,沒有其他的目的。之所以需要物件序列化,是因為有時候物件需要在網路上傳輸,傳輸的時候需要這種序列化處理,從伺服器硬碟上把序列化的物件取 出,然後通過網路傳到客戶端,再由客戶端把序列化的物件讀入記憶體,執行相應的處理。

將二級快取中的內容持久化儲存下來,便於恢復快取的資訊,hibernate的快取機制通過使用序列化,斷定應該是基於序列化的快取,如沒有 serializable介面,在序列化時,使用objectOutputStream的write(object)方法將物件儲存到檔案時將會出現異常。

Hibernate並不要求持久化類必須實現java.io.Serializable介面,但是對於採用分散式結構的Java應用,當Java物件在不同的程序節點之間傳輸時,這個物件所屬的類必須實現Serializable介面,此外,在Java Web應用中,如果希望對HttpSession中存放的Java物件進行持久化,那麼這個Java物件所屬的類也必須實現Serializable介面。