引言
在Java環境下有多種對象關系映射方法如實體BeanOJBJDOJDBC等Hibernate是一種新的O/R映射工具它不僅提供了從Java類到數據表的映射也提供了數據查詢和恢復等機制Hibernate非常簡單易學目前國內有很多同行已經或正在用Hibernate開發實施項目但Hibernate有很多規則不為人知或應用甚少本文的目的就是將這些規則歸納總結希望對您的開發和設計有益
首先聲明本文是Hibernate入門級文章高手請不用往下看了
基本定則
定則一數據庫配置文件名稱可以不是Hibernateproperties或Hibernatecfgxml
由於Hibernate官方文檔(本文指的文檔)的影響很多Hibernate開發者誤以為系統一定要有名稱為Hibernateproperties或Hibernatecfgxml的文件而且一定要放在classes的根目錄下實際上該文件只是一般的配置文件名稱可以自己取文件位置可以自己定而且在多數據庫環境下可以有多個配置文件使得程序可以連接多個數據庫只是您在創建會話工廠時需要特殊處理代碼示例如下
//配置文件名稱
protected static String CONFIG_FILE = nfig
//配置文件目錄可以考慮在該目錄下存放系統所有配置文件此處使用虛擬機參數
String configPath = SystemgetProperty(nfig)
//創建會話工廠
sessionFactory =( new Configuration()configure(new File(configPath+Fileseparator+CONFIG_FILE))) buildSessionFactory()
定則二小型項目中hbmxml文件可以合並到一個文件中
同樣由於Hibernate官方文檔的影響很多Hibernate開發者誤以為Hibernate的對象關系映射一定要一個表對應一個對象並將映射文件和對象文件放在同一目錄下實際上該模式是為規范性考慮而設計的因為在多人參與的項目中多人要維護同一文件容易產生沖突當項目比較小時配置文件的維護人員少我們完全可以將hbmxml文件合並到一個或者幾個文件中依據作者本人的項目設計開發經驗最好是項目中有幾人同時從事O/R映射和持久工作則設定幾個hbmxml文件每人維護一個當然為了便於分類和管理每人的工作應該按邏輯劃分
大型項目中的文件配置示例如下
<hibernateconfiguration>
<sessionfactory>
<!—映射文件分散 >
<mapping resource=com/hongsoft/test/ persistence/Cathbmxml/>
<mapping resource=com/hongsoft/test/ persistence/Animalhbmxml/>
</sessionfactory>
</hibernateconfiguration>
小型項目中的文件配置示例如下
<hibernateconfiguration>
<sessionfactory>
<!—映射文件集中 >
<mapping resource=res_hibernate_mapxml/>
</sessionfactory>
</hibernateconfiguration>
要注意的是 從對Hibernate源代碼的分析可知指定映射文件時不能用絕對目錄只能用相對目錄而且系統以classes根目錄為當前目錄
定則三對象關系映射是以hbmxml文件為基准的而不是以PO文件為基准
該定律的意思是系統啟動檢查您的對象關系映射是否正確時是以hbmxml為基准來進行檢查的對象文件的property可以比映射文件的property多但不能少如果您有如下的映射
<class name=comhongsofttestUser table=res_user>
<id name=id column=id type=long unsavedvalue=any>
<generator class=assigned>
</generator>
</id>
<property name=name/>
<property name=loginName/>
<property name=passwd/>
</class>
系統啟動檢查數據庫和其他配置正確後將以該文件為基准首先檢查User對象中有無id屬性和對應的get/set方法如果沒有則報錯如果有且正確則檢查有無name屬性和對應的get/set方法……直到文件結束要注意的是如果屬性為name則get方法名稱必須為getName()set方法名稱必須為setName()否則會報錯
如果User對象除了有idnameloginName passwd四個屬性和對應的方法還有其它的屬性和方法會報錯嗎?不會因為對象關系映射是以hbmxml文件為基准的而不是以PO文件為基准您在項目中可以充分利用該特點實現您自己的比較特殊的需求例如您可以在User對象中加入updatedPasswd表示更改後的口令由此構造在表示層要使用的FormBean和在業務層要使用的ValueObject當然這樣做也有缺點需要根據您的實際情況而定
總結
上面是作者對Hibernate映射的容易理解錯誤的知識點的歸納總結希望對您有幫助如果您發現有錯誤或有自己的觀點歡迎討論
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28062.html