原文地址:
http://testwww.netbeans.org/kb/55/persistence_zh_CN.html
Java EE 5 平臺(tái)中的 Java 持久性
本文檔向您介紹了有關(guān)使用 Java™ 持久性開發(fā) Web 應(yīng)用程序的基礎(chǔ)知識(shí)。Java 持久性 API 是作為 Java EE 5 平臺(tái)的一部分引入的。在本教程中,您將創(chuàng)建一個(gè)簡單的 Web 應(yīng)用程序項(xiàng)目。我們將在項(xiàng)目中使用持久性,但是 Java 持久性 API 允許我們?cè)跓o需創(chuàng)建 EJB 模塊的情況下使用持久性。
在項(xiàng)目中使用 Java 持久性可以大大簡化應(yīng)用程序的開發(fā),因?yàn)槟恍枰渲貌渴鹈枋龇麨槌志眯宰侄位驅(qū)傩蕴峁?duì)象關(guān)系映射信息,而可以使用標(biāo)注直接在簡單的 Java 類中定義這些屬性。
實(shí)體持久性是通過 EntityManager API 來管理的。EntityManager API 用于處理持久性上下文,而每個(gè)持久性上下文是一組實(shí)體實(shí)例。在開發(fā)應(yīng)用程序時(shí),您可以在類中使用標(biāo)注來指定實(shí)體實(shí)例的持久性上下文實(shí)例,然后通過容器處理實(shí)體實(shí)例的生命周期。
本文檔使用的是 NetBeans IDE 5.5 發(fā)行版本。
預(yù)計(jì)持續(xù)時(shí)間:15 分鐘
先決條件
本文檔假定您已具備以下技術(shù)的一些基本知識(shí)或編程經(jīng)驗(yàn):
本教程所需的軟件
在學(xué)習(xí)本教程之前,您需要在計(jì)算機(jī)中安裝以下軟件:
- NetBeans IDE 5.5(下載)
- Java Standard Development Kit (JDK) 版本 5.0 或版本 6.0(下載)
- Sun Java System Application Server Platform Edition 9(下載)
在學(xué)習(xí)本教程之前,您需要在 IDE 中注冊(cè) Sun Java System Application Server 的本地實(shí)例。
教程練習(xí)
建立 Web 應(yīng)用程序項(xiàng)目
本練習(xí)的目的是創(chuàng)建 ZooApp Web 應(yīng)用程序項(xiàng)目。此應(yīng)用程序?qū)⒗眯略龅?Java 持久性模型的功能。其中一項(xiàng)功能就是,實(shí)體對(duì)象可以成為簡單的 Java 類,因此不再需要將它們放置在 EJB 模塊中并將其打包到 EAR 文件中。這意味著,我們可以直接在 Web 應(yīng)用程序內(nèi)創(chuàng)建實(shí)體類。
- 選擇“文件”>“新建項(xiàng)目”(Ctrl-Shift-N)。從 "Web" 類別中選擇“Web 應(yīng)用程序”,然后單擊“下一步”。
- 將項(xiàng)目命名為 ZooApp,將服務(wù)器設(shè)置為 "Sun Java System Application Server",將 Java EE 版本設(shè)置為 "Java EE 5",然后單擊“下一步”。
- 選中 "JavaServer Faces" 復(fù)選框,然后單擊“完成”。
小結(jié)
在本練習(xí)中,您創(chuàng)建了一個(gè)將包含實(shí)體類的 Java EE 5 Web 應(yīng)用程序。
創(chuàng)建持久性單元
在本練習(xí)中,我們將創(chuàng)建一個(gè)持久性單元,目的在于通知容器哪些實(shí)體類需要由實(shí)體管理器進(jìn)行管理,以及這些實(shí)體需要使用哪些數(shù)據(jù)源信息。
我們通過在 persistence.xml(將在 Web 模塊中創(chuàng)建此文件)中定義持久性單元的屬性來創(chuàng)建持久性單元。指定持久性單元的名稱后,將指定持久性提供程序,它包含容器將用于管理實(shí)體實(shí)例的 API。此外,還需要指定數(shù)據(jù)源和表生成策略。我們將使用“新建持久性單元”向?qū)?chuàng)建持久性單元。
注意:也可以在“新建 - 實(shí)體類”向?qū)е袆?chuàng)建持久性單元。創(chuàng)建實(shí)體類時(shí),如果不存在持久性單元,該向?qū)⑻崾疚覀冞M(jìn)行創(chuàng)建。
創(chuàng)建持久性單元
- 在“項(xiàng)目”窗口中右鍵單擊 "ZooApp" Web 應(yīng)用程序節(jié)點(diǎn),然后選擇“新建”>“文件/文件夾”以打開“新建文件”向?qū)А?
- 從“持久性”類別中,選擇“持久性單元”,然后單擊“下一步”。
- 保留缺省的持久性單元名稱。
- 對(duì)于“持久性提供程序”,使用 TopLink(default)。
缺省提供程序是 TopLink Essential.jar。TopLink Essential.jar 包含了 Java 持久性的庫。并且實(shí)體管理器位于 TopLink Essential.jar 中。
- 對(duì)于“數(shù)據(jù)源”,使用缺省的數(shù)據(jù)源 jdbc/sample。
缺省數(shù)據(jù)源 jdbc/sample 用于連接到與 Sun Java System Application Server 捆綁在一起的 Java DB 數(shù)據(jù)庫。
- 檢查是否為持久性單元選中了“使用 Java 事務(wù) API”,以及“表生成策略”是否設(shè)置為“創(chuàng)建”,以便在部署應(yīng)用程序時(shí)創(chuàng)建基于實(shí)體類的表。
- 單擊“完成”。
![“新建持久性單元”向?qū)?src="http://testwww.netbeans.org/images/articles/javaee5/zooapp_persistence_unit_wizard_zh_CN.png"]()
單擊“完成”后,IDE 將創(chuàng)建 persistence.xml,并在源代碼編輯器中將其打開。通過單擊源代碼編輯器工具欄中的 "XML",可以查看 persistence.xml 的 XML。此文件包含了 Java EE 5 容器管理應(yīng)用程序的實(shí)體和持久性所需的所有信息。
小結(jié)
在本練習(xí)中,您創(chuàng)建了一個(gè)持久性單元,用來指定數(shù)據(jù)源、要永久保存的實(shí)體類以及容器將用于管理實(shí)體生命周期的實(shí)體管理器。
創(chuàng)建實(shí)體類
在本練習(xí)中,我們將創(chuàng)建兩個(gè)實(shí)體類,即 Animal.java 和 Pavilion.java,它們用于表示要?jiǎng)?chuàng)建的關(guān)系數(shù)據(jù)庫中的表。此外,還將在類中定義一些字段來表示數(shù)據(jù)。Java 持久性規(guī)范允許我們使用標(biāo)注為容器提供有關(guān)字段的信息,如對(duì)象關(guān)系映射信息。
創(chuàng)建 Animal 實(shí)體類
首先,我們將創(chuàng)建實(shí)體類 Animal。此類用于表示數(shù)據(jù)庫中的 ANIMAL 表。在創(chuàng)建實(shí)體類時(shí),IDE 會(huì)添加 @Entity 標(biāo)注以將該類定義為實(shí)體類。創(chuàng)建類后,我們將在類中創(chuàng)建字段以表示表中所需的數(shù)據(jù),并使用標(biāo)注提供有關(guān)一些字段的其他信息。
每個(gè)實(shí)體類都必須具有一個(gè)主鍵。在創(chuàng)建實(shí)體類時(shí),IDE 會(huì)添加 @Id 標(biāo)注以聲明要用作主鍵的字段。此外,IDE 還會(huì)添加 @Generated 標(biāo)注以指定主 Id 的鍵生成策略。
要?jiǎng)?chuàng)建 Animal 類,請(qǐng)執(zhí)行以下操作:
- 右鍵單擊 "ZooApp" 項(xiàng)目節(jié)點(diǎn),然后選擇“新建”>“文件/文件夾”。
- 從“持久性”類別中,選擇“實(shí)體類”,然后單擊“下一步”。
- 鍵入 Animal 作為類名,鍵入 entity 作為包名,并將“主鍵類型”保留為 Long。單擊“完成”。
單擊“完成”后,將在源代碼編輯器中打開新建的實(shí)體類 Animal.java。在源代碼編輯器中,請(qǐng)執(zhí)行以下操作:
- 將以下字段聲明添加到類中:
String name;
String kind;
String weight;
Pavilion pavilion;
- 在源代碼編輯器中單擊鼠標(biāo)右鍵,然后選擇“重構(gòu)”>“封裝字段”以便為每個(gè)字段生成 getter 和 setter。在“封裝字段”對(duì)話框中,確保選中所有字段的 getter 和 setter 復(fù)選框。
- 在“封裝字段”對(duì)話框中單擊“下一步”,然后在“輸出”窗口的“重構(gòu)”標(biāo)簽中單擊“執(zhí)行重構(gòu)”。
- 現(xiàn)在我們希望更改將在 Animal 表中創(chuàng)建的其中一列的名稱。我們希望該列的名稱是 animalName 而不是 name。通過在 name 字段聲明之上添加以下標(biāo)注,可以使用標(biāo)注來指定生成列的名稱:
@Column(name="animalName")
- 我們還希望 Animal 表中的 pavilion 列具有多對(duì)一的關(guān)系。通過在 pavilion 聲明之上添加以下標(biāo)注,可以實(shí)現(xiàn)這一目的:
@ManyToOne
- 按 Alt-Shift-F 組合鍵為類生成所有必要的 import 語句。
- 保存您所做的更改。
在下一步中,我們將創(chuàng)建 Pavilion 實(shí)體類。
創(chuàng)建 Pavilion 實(shí)體類
現(xiàn)在我們將創(chuàng)建實(shí)體類 Pavilion,它用于表示數(shù)據(jù)庫中的 PAVILION 表。我們將再次在類中使用標(biāo)注指定一些字段的對(duì)象關(guān)系映射。要?jiǎng)?chuàng)建 Pavilion 類,請(qǐng)執(zhí)行以下操作:
- 右鍵單擊 "ZooApp" 項(xiàng)目節(jié)點(diǎn),然后選擇“新建”>“文件/文件夾”。
- 從“持久性”類別中,選擇“實(shí)體類”,然后單擊“下一步”。
- 鍵入 Pavilion 作為類名,鍵入 entity 作為包名,并將“主鍵類型”保留為 Long。單擊“完成”。
單擊“完成”后,將在源代碼編輯器中打開新建的實(shí)體類 Pavilion.java。在源代碼編輯器中,請(qǐng)執(zhí)行以下操作:
- 將以下字段聲明添加到類中:
String name;
String address;
Collection <Animal> animals;
- 選擇“重構(gòu)”>“封裝字段”以便為字段生成 getter 和 setter。
- 在 name 聲明之上添加以下標(biāo)注以更改生成列的名稱:
@Column(name="pavilionName")
- 在 animals 聲明之上添加以下標(biāo)注,為實(shí)體指定一對(duì)多的關(guān)系:
@OneToMany(mappedBy="pavilion")
- 按 Alt-Shift-F 組合鍵生成所有缺少的 import 語句。
- 保存您所做的更改。
小結(jié)
在本練習(xí)中,您創(chuàng)建了兩個(gè)實(shí)體類并定義了字段,而且還使用標(biāo)注定義了在部署應(yīng)用程序時(shí)將在表中生成的某些列的屬性。
創(chuàng)建 Web 接口
現(xiàn)在我們希望創(chuàng)建一些簡單的 Web 頁,以查看是否創(chuàng)建了數(shù)據(jù)庫表以及是否可以添加數(shù)據(jù)。我們將為應(yīng)用程序添加 Java Server Faces (JSF) 頁,并使用“通過實(shí)體類創(chuàng)建 JSF 頁”向?qū)Э焖賱?chuàng)建一個(gè)簡單的 Web 接口。
- 從主菜單中,選擇“文件”>“新建文件”。從“持久性”類別中,選擇“通過實(shí)體類創(chuàng)建 JSF 頁”,然后單擊“下一步”。
- 在“新建 - 通過實(shí)體類創(chuàng)建 JSF 頁”向?qū)е校瑔螕?#8220;全部添加”以選擇兩個(gè)實(shí)體類,然后單擊“下一步”。
- 將“JSF 頁文件夾”文本字段保留為空,以便在缺省位置保存 JSF 文件。
- 將 entity 指定為已生成類的包,然后單擊“完成”。
單擊“完成”后,IDE 將生成所需的 JavaServer Faces 文件,以便我們可以運(yùn)行并測試 ZooApp。
運(yùn)行項(xiàng)目
在本練習(xí)中,我們將部署 ZooApp Web 應(yīng)用程序項(xiàng)目并測試該應(yīng)用程序。
- 啟動(dòng) Java DB 數(shù)據(jù)庫,方法是:選擇“工具”>“Java DB 數(shù)據(jù)庫”>“啟動(dòng) Java DB 服務(wù)器”。
- 右鍵單擊 "ZooApp" 項(xiàng)目節(jié)點(diǎn),然后選擇“運(yùn)行項(xiàng)目”。
單擊“運(yùn)行項(xiàng)目”后,將在瀏覽器中打開一個(gè)頁面,您可以通過該頁面包含的菜單,查看場館 (Pavilions) 和動(dòng)物 (Animals) 的列表。
您還可以添加、編輯或刪除動(dòng)物 (Animals) 和場館 (Pavilions) 數(shù)據(jù)。
小結(jié)
在本練習(xí)中,您生成了為 Java EE 5 平臺(tái)開發(fā)的 ZooApp Web 應(yīng)用程序,然后部署并測試了該 Web 應(yīng)用程序。
疑難解答
下面是您創(chuàng)建項(xiàng)目時(shí)可能會(huì)遇到的一些問題。
使用“新建 - 通過實(shí)體類創(chuàng)建 JSF 頁”向?qū)r(shí)的問題
使用該向?qū)ㄟ^實(shí)體類創(chuàng)建 JSF 頁時(shí),您可能會(huì)在向?qū)е锌吹揭韵洛e(cuò)誤消息:
"This wizard can only be used in a web project with JSF support."(此向?qū)е荒茉诰哂?JSF 支持的 Web 項(xiàng)目中使用。)
如果看到此消息,則需要檢查是否已將 Java Server Faces 框架添加到項(xiàng)目屬性中。通過執(zhí)行以下操作,可以將 Java Server Faces 支持添加到 Web 項(xiàng)目中:
- 在“項(xiàng)目”窗口中,右鍵單擊 Web 應(yīng)用程序節(jié)點(diǎn),然后選擇“屬性”。
- 在“項(xiàng)目屬性”對(duì)話框的“類別”窗格中選擇“框架”,然后單擊“添加”。
- 在“選擇框架”對(duì)話框中,選擇 "Java Server Faces",然后單擊“確定”。
- 在“項(xiàng)目屬性”對(duì)話框中,單擊“確定”以關(guān)閉窗口。
將 JSF 框架添加到項(xiàng)目屬性后,您應(yīng)該能夠使用該向?qū)?chuàng)建 JSF 頁了。
后續(xù)步驟
有關(guān)使用 NetBeans IDE 5.5 開發(fā) Java EE 應(yīng)用程序的更多信息,請(qǐng)參見以下資源:
您可以在 Java EE 5 教程中找到有關(guān)使用 Java 持久性的詳細(xì)信息。
要發(fā)送意見和建議、獲得支持以及隨時(shí)了解 NetBeans IDE Java EE 開發(fā)功能的最新開發(fā)情況,請(qǐng)加入 nbj2ee 郵件列表。