持久化類的屬性及訪問方法

-------------------------------------------------------------------

1、持久化類的訪問者有兩個,一是JAVA應用程序,二是hibernate

 寫:Java應用程序通過setter設置持久化對象的屬性,hibernate通過getter獲取持久化對象的屬性並生成相應的SQL語句對錶格進行操作。

 讀:hibernate通過setter設置持久化對象的屬性,Java應用程序通過getter獲取持久化對象的屬性。

 

2、hibernate訪問持久化類屬性的策略

Hibernate通過name指定的值訪問持久化對象。Hibernate通過name值,反射持久化對象的對方法。比如,name的值爲gender。 Hibernate會直接反射持久化對象的getGender和setGender方法。所以我們必須保證持久化對象中有對應的方法。這是因爲property有一個access屬性,它的默認值爲property(推薦)。

如果指定access的值爲field,則hibernate直接根據name值反射持久化對象的屬性。此時,我們必須保證持久化對象中有對應的屬性。

 

3、 在持久化類的方法中加入程序邏輯

如果access的值爲property,hibernate直接反射持久化對象的方法。在這個方法中我們就可以加入程序邏輯。老徐舉了一個生動的例子,比如Customer類中有firstname和lastname兩個屬性。但我們只想讓hibernate通過getName方法獲得一個firstname+lastname的字符串,此時我們就可以在getName方法中將firstname與lastname兩個屬性值合併爲一箇中間使用 “.”連接的字符串返回。

 使用hibernate獲取數據表中的數據時,hibernate會調用持久化對象的setName方法。我們在這個方法中將傳遞進來的參數使用“.”分隔,然後分別設置到firestname和lastname屬性中。

--------------------------------------------------------------------

 

因爲公司裏的項目使用註解對hibernate 的實體進行映射,這裏,映射存在兩種方式,一種是標註在field上,一種是標註在getter方法上,究竟這兩種方法有什麼不同呢,這個問題困擾了我很久。今天看到上面那解釋,寫終於解開了謎團。

就像第一點所說的那樣,pojo有兩個訪問者,一是java應用程序,而是hibernate,這兩者訪問是不同的,java應用程序是通過getter和setter方法來訪問的,hibernate是通過反射來訪問的,如果你的pojo需要被java訪問,那麼被訪問的屬性必須提供getter和setter方法,否則,就不需要了。hibernate訪問pojo是可配置的,默認是property,即通過getter和setter,這時你的pojo必須提供這兩個方法,如果設置爲field,那麼hibernate是直接反射field來獲取和設置值的,field就必須在pojo裏存在,這裏關鍵是明白第二點,即hibernate訪問持久化類策略的問題。

 

迴歸正題,就是關於那個註解標註位置問題,標註在field上就相當於設置access值爲field,getter上就相當於設置access值爲property

 

這裏有一篇不錯的技術博客介紹,相當有技巧

http://blog.sina.com.cn/s/blog_4b21f7e9010009cz.html

希望能幫助大家理解

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章