[英]Serialization vs DB Storage
我目前正在研究Java序列化。 但是,我仍然對其實用性感到困惑。 一般而言,與直接將數據存儲在各種數據庫列中相比,我們應該何時使用序列化?
我認為您將序列化與讀寫對象到數據庫混淆了。
如此SO答案中所述,休眠表類是否需要可序列化? JPA對象(休眠模式)應該實現Serializable
以便可以通過RMI將分離的實體發送到應用程序的其他層。
這與Hibernate如何將數據讀取和寫入數據庫無關。 只要您不使用分離對象,就可以不用實體實現Serializable
而擺脫Serializable
,休眠仍然可以正常工作。
Hibernate通過JDBC讀寫數據庫,就像您自己編寫SQL查詢一樣。 如果您想了解更多有關hibernate如何將對象字段轉換為JDBC方法的信息,可以先查看Hibernate UserType 。 默認情況下,Hibernate具有許多內置的用戶類型,可以將String
, Date
, int
等類型的ResultSet
列與數據庫進行相互轉換。 如果您需要編寫偶爾出現的自己的UserType,則只需編寫自己的UserType實現,這非常簡單。
Hibernate增強的類實際上可以是Serializable
。 但是,在使用這種方式之前,您應該考慮所有結果。 您可能會遇到這些問題:
@Json*
批注) 要了解這些問題,您需要了解Hibernate的實際工作方式。
增強功能允許部分加載實體。 例如,您想獲取給定用戶的所有書籍。 您會得到一本書的集合,但是實際上所擁有的是一個休眠增強類的集合,這些類目前僅包裝ID。 前提是您使用默認的延遲加載。
除非您確實需要ID以外的其他內容,否則永遠不會加載數據。 進行getter調用時,如有必要,將進行后台查詢以獲取額外的信息。
現在,想象一個用戶擁有他所有書集的一個字段。 從數據庫延遲加載時,可能什么也沒有。 但是,如果您要序列化它,則將調用所有獲取方法,並獲取所有書籍,並且如果所有書籍與它的作者有聯系,則傳遞每個書籍作者。
如果在類中該關系是雙向的,則您甚至可以創建一個周期,該周期將導致堆棧溢出錯誤,您可以在其中查找誰是這本書的所有者,然后再次為他取書。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.