看了一下Web開發的書,發現了這些詞。讓我很疑惑。這些詞匯什么意思,又有什么關系?
看了一些文檔之后,對它們的基本概念有了最基礎的認識。
POJO:Pure Old Java Object,符合Java Bean屬性規范的簡單Java對象,通常也稱為VO(Value Object,值對象)。
PO:Persistent Object,持久化對象。
VO、PO、FormBean之間的區別:VO是獨立的Java Object;而PO是Hibernate納入其實體容器(Entity Map)的對象。它代表了與數據庫中某條記錄相對應的Hibernata實體,PO的變化在事務提交時將反映到實際的數據庫中。FormBean只是HTML中表單的封裝,是為了弱化request中存儲數據的作用,將request對象的get()方法轉化為對象的存取值。
VO和PO在結構上看,沒什么區別。但從本質上看是完全不同的。
VO由new關鍵字創建,由GC回收。PO則是向數據庫中添加新數據時創建,刪除數據庫中數據時刪除,并且它只能存活在一個數據庫連接中,斷開連接即被銷毀。
VO是業務對象,由業務邏輯使用,它存活的目的就是為數據提供一個生存的地方。PO則是數據對象的表現,它可以簡化對象數據與物理數據的轉換。
VO的屬性根據當前的業務不同而不同。PO的屬性則是跟數據庫表的字段一一對應。PO對象需要實現序列化接口。
在Hibernate中,最核心的概念就是對PO的狀態管理。一個PO有三種狀態:
1.未被持久化的VO,此時就是一個內存對象VO,由JVM管理生命周期。
2.已被持久化的PO,并且在Session生命周期內,此時映射數據庫連接,由數據庫管理生命周期。
3.曾被持久化過,但現在和Session已經托管(detached)了,以VO的身份在運行。它還可以進入另一個Session,繼續PO狀態管理。
需要注意的是, PO最好只在持久層使用,如果脫離持久層到處使用,會給Hibernate帶來不小的PO對象維護開銷。