對象-關系映射(O/R映射)是許多軟件開發項目的常見需求。數據持久化過程中所涉及到的活動是非常乏味且易于出錯的。假如考慮到不可避免的需求變化,我們就面臨很大的麻煩:數據存儲結構必須與源代碼保持同步。再加上移植性問題,事情就變得非常復雜。
而Hibernate可以幫助我們輕松地在永久性存儲介質中保存數據,而不需要在選擇存儲、安裝或配置類型方面浪費太多精力。Hibernate答應我們存儲任何類型的對象,因此,應用程序不需要知道其數據將使用Hibernate進行持久化。當然,這里提到的任何事情都可以逆向應用:現在從存儲器獲取已經預備好的對象是很平常的事情。更新和刪除數據也是如此。
開始之前
在開始之前,您需要Hibernate的發行版,可以在Hibernate web站點(www.hibernate.org)上找到它。我們將使用2.0.3版本。對于數據庫,我們將使用Hypersonic SQL 1.7.1版本,它可以在hsqldb.sourceforge.net上找到。 Hibernate還支持許多開源或商業數據庫,例如MySQL、PostgreSQL、Oracle、DB2等。對于受支持的任何數據庫,安裝這個教程都很簡單。完整列表參見官方文檔。
注重:假如您不希望類被持久化在數據庫中(比如說,您只希望進行串行化),那么Hibernate API為您提供了net.sf.hibernate.persister.EntityPersister類和net.sf.hibernate.persister.ClassPersister接口。通過編寫子類或實現它們,您可以編寫自己的持久化類,并根據需要使用它們。
下載了所有必需的安裝包后,我們必須設置測試環境。基本上,我們所需做的就是把下載的.jar文件放到CLASSPATH中。這包括Hibernate發行版中的hibernate2.jar和Hypersonic的lib/ 目錄下的hsqldb.jar。Hibernate還需要其他的幾個庫,這些庫都可以在<hibernate-dist>/lib目錄中找到。并不是該目錄下的所有.jars文件都需要,但是假如您使用所有文件,也沒有什么壞處。在我們開始研究Hibernate之前,我們將首先定義我們的問題域。
注重:Hibernate使用Apache的commons-logging。它是一個智能工具,假如找到log4j,它就會默認地使用它。Log4j是一個出色的日志記錄庫,我們將在這個教程中使用它。假如您還沒有這個軟件(您真的應該安裝這個軟件!),可以從Log4j homepage下載,并將它添加到CLASSPATH中。使用Hibernate團隊所提供的示例log4j.PRoperties,它可以在<hibernate-dist>/src目錄下找到。
問題引入
每個開發人員都至少執行過一次類似的任務:創建一個訂單,把一些產品放在其中,它就變成訂單項,然后保存該訂單。
我們使用這些簡單的SQL命令來設置數據庫:
CREATE TABLE ORDERS(
ID VARCHAR NOT NULL PRIMARY KEY,
ORDER_DATE TIMESTAMP NOT NULL,
PRICE_TOTAL DOUBLE NOT NULL)
CREATE TABLE PRODUCTS(
ID VARCHAR NOT NULL PRIMARY KEY,
NAME VARCHAR NOT NULL,
PRICE DOUBLE NOT NULL,
AMOUNT INTEGER NOT NULL)
CREATE TABLE ORDER_ITEMS(
ID VARCHAR NOT NULL PRIMARY KEY,
ORDER_ID VARCHAR NOT NULL,
PRODUCT_ID VARCHAR NOT NULL,
AMOUNT INTEGER NOT NULL,
PRICE DOUBLE NOT NULL)
這個數據模型非常簡單。對于一個實際的“生產質量”數據模型,我們會需要外鍵、索引、額外的字段等等。對于本教程,上面的數據模型就可以了。
注重:假如您決定為這個教程使用HypersonicSQL,那么可以使用本文附件源軟件包中提供的orders.script和orders.properties文件。
新聞熱點
疑難解答