原文地址:
http://testwww.netbeans.org/kb/55/persistence_zh_CN.html
Java EE 5 平臺中的 Java 持久性
本文檔向您介紹了有關使用 Java™ 持久性開發 Web 應用程序的基礎知識。Java 持久性 API 是作為 Java EE 5 平臺的一部分引入的。在本教程中,您將創建一個簡單的 Web 應用程序項目。我們將在項目中使用持久性,但是 Java 持久性 API 允許我們在無需創建 EJB 模塊的情況下使用持久性。
在項目中使用 Java 持久性可以大大簡化應用程序的開發,因為您不需要配置部署描述符為持久性字段或屬性提供對象關系映射信息,而可以使用標注直接在簡單的 Java 類中定義這些屬性。
實體持久性是通過 EntityManager API 來管理的。EntityManager API 用于處理持久性上下文,而每個持久性上下文是一組實體實例。在開發應用程序時,您可以在類中使用標注來指定實體實例的持久性上下文實例,然后通過容器處理實體實例的生命周期。
本文檔使用的是 NetBeans IDE 5.5 發行版本。
預計持續時間:15 分鐘
先決條件
本文檔假定您已具備以下技術的一些基本知識或編程經驗:
本教程所需的軟件
在學習本教程之前,您需要在計算機中安裝以下軟件:
- NetBeans IDE 5.5(下載)
- Java Standard Development Kit (JDK) 版本 5.0 或版本 6.0(下載)
- Sun Java System Application Server Platform Edition 9(下載)
在學習本教程之前,您需要在 IDE 中注冊 Sun Java System Application Server 的本地實例。
教程練習
建立 Web 應用程序項目
本練習的目的是創建 ZooApp Web 應用程序項目。此應用程序將利用新增的 Java 持久性模型的功能。其中一項功能就是,實體對象可以成為簡單的 Java 類,因此不再需要將它們放置在 EJB 模塊中并將其打包到 EAR 文件中。這意味著,我們可以直接在 Web 應用程序內創建實體類。
- 選擇“文件”>“新建項目”(Ctrl-Shift-N)。從 "Web" 類別中選擇“Web 應用程序”,然后單擊“下一步”。
- 將項目命名為 ZooApp,將服務器設置為 "Sun Java System Application Server",將 Java EE 版本設置為 "Java EE 5",然后單擊“下一步”。
- 選中 "JavaServer Faces" 復選框,然后單擊“完成”。
小結
在本練習中,您創建了一個將包含實體類的 Java EE 5 Web 應用程序。
創建持久性單元
在本練習中,我們將創建一個持久性單元,目的在于通知容器哪些實體類需要由實體管理器進行管理,以及這些實體需要使用哪些數據源信息。
我們通過在 persistence.xml(將在 Web 模塊中創建此文件)中定義持久性單元的屬性來創建持久性單元。指定持久性單元的名稱后,將指定持久性提供程序,它包含容器將用于管理實體實例的 API。此外,還需要指定數據源和表生成策略。我們將使用“新建持久性單元”向導創建持久性單元。
注意:也可以在“新建 - 實體類”向導中創建持久性單元。創建實體類時,如果不存在持久性單元,該向導將提示我們進行創建。
創建持久性單元
- 在“項目”窗口中右鍵單擊 "ZooApp" Web 應用程序節點,然后選擇“新建”>“文件/文件夾”以打開“新建文件”向導。
- 從“持久性”類別中,選擇“持久性單元”,然后單擊“下一步”。
- 保留缺省的持久性單元名稱。
- 對于“持久性提供程序”,使用 TopLink(default)。
缺省提供程序是 TopLink Essential.jar。TopLink Essential.jar 包含了 Java 持久性的庫。并且實體管理器位于 TopLink Essential.jar 中。
- 對于“數據源”,使用缺省的數據源 jdbc/sample。
缺省數據源 jdbc/sample 用于連接到與 Sun Java System Application Server 捆綁在一起的 Java DB 數據庫。
- 檢查是否為持久性單元選中了“使用 Java 事務 API”,以及“表生成策略”是否設置為“創建”,以便在部署應用程序時創建基于實體類的表。
- 單擊“完成”。

單擊“完成”后,IDE 將創建 persistence.xml,并在源代碼編輯器中將其打開。通過單擊源代碼編輯器工具欄中的 "XML",可以查看 persistence.xml 的 XML。此文件包含了 Java EE 5 容器管理應用程序的實體和持久性所需的所有信息。
小結
在本練習中,您創建了一個持久性單元,用來指定數據源、要永久保存的實體類以及容器將用于管理實體生命周期的實體管理器。
創建實體類
在本練習中,我們將創建兩個實體類,即 Animal.java 和 Pavilion.java,它們用于表示要創建的關系數據庫中的表。此外,還將在類中定義一些字段來表示數據。Java 持久性規范允許我們使用標注為容器提供有關字段的信息,如對象關系映射信息。
創建 Animal 實體類
首先,我們將創建實體類 Animal。此類用于表示數據庫中的 ANIMAL 表。在創建實體類時,IDE 會添加 @Entity 標注以將該類定義為實體類。創建類后,我們將在類中創建字段以表示表中所需的數據,并使用標注提供有關一些字段的其他信息。
每個實體類都必須具有一個主鍵。在創建實體類時,IDE 會添加 @Id 標注以聲明要用作主鍵的字段。此外,IDE 還會添加 @Generated 標注以指定主 Id 的鍵生成策略。
要創建 Animal 類,請執行以下操作:
- 右鍵單擊 "ZooApp" 項目節點,然后選擇“新建”>“文件/文件夾”。
- 從“持久性”類別中,選擇“實體類”,然后單擊“下一步”。
- 鍵入 Animal 作為類名,鍵入 entity 作為包名,并將“主鍵類型”保留為 Long。單擊“完成”。
單擊“完成”后,將在源代碼編輯器中打開新建的實體類 Animal.java。在源代碼編輯器中,請執行以下操作:
- 將以下字段聲明添加到類中:
String name;
String kind;
String weight;
Pavilion pavilion;
- 在源代碼編輯器中單擊鼠標右鍵,然后選擇“重構”>“封裝字段”以便為每個字段生成 getter 和 setter。在“封裝字段”對話框中,確保選中所有字段的 getter 和 setter 復選框。
- 在“封裝字段”對話框中單擊“下一步”,然后在“輸出”窗口的“重構”標簽中單擊“執行重構”。
- 現在我們希望更改將在 Animal 表中創建的其中一列的名稱。我們希望該列的名稱是 animalName 而不是 name。通過在 name 字段聲明之上添加以下標注,可以使用標注來指定生成列的名稱:
@Column(name="animalName")
- 我們還希望 Animal 表中的 pavilion 列具有多對一的關系。通過在 pavilion 聲明之上添加以下標注,可以實現這一目的:
@ManyToOne
- 按 Alt-Shift-F 組合鍵為類生成所有必要的 import 語句。
- 保存您所做的更改。
在下一步中,我們將創建 Pavilion 實體類。
創建 Pavilion 實體類
現在我們將創建實體類 Pavilion,它用于表示數據庫中的 PAVILION 表。我們將再次在類中使用標注指定一些字段的對象關系映射。要創建 Pavilion 類,請執行以下操作:
- 右鍵單擊 "ZooApp" 項目節點,然后選擇“新建”>“文件/文件夾”。
- 從“持久性”類別中,選擇“實體類”,然后單擊“下一步”。
- 鍵入 Pavilion 作為類名,鍵入 entity 作為包名,并將“主鍵類型”保留為 Long。單擊“完成”。
單擊“完成”后,將在源代碼編輯器中打開新建的實體類 Pavilion.java。在源代碼編輯器中,請執行以下操作:
- 將以下字段聲明添加到類中:
String name;
String address;
Collection <Animal> animals;
- 選擇“重構”>“封裝字段”以便為字段生成 getter 和 setter。
- 在 name 聲明之上添加以下標注以更改生成列的名稱:
@Column(name="pavilionName")
- 在 animals 聲明之上添加以下標注,為實體指定一對多的關系:
@OneToMany(mappedBy="pavilion")
- 按 Alt-Shift-F 組合鍵生成所有缺少的 import 語句。
- 保存您所做的更改。
小結
在本練習中,您創建了兩個實體類并定義了字段,而且還使用標注定義了在部署應用程序時將在表中生成的某些列的屬性。
創建 Web 接口
現在我們希望創建一些簡單的 Web 頁,以查看是否創建了數據庫表以及是否可以添加數據。我們將為應用程序添加 Java Server Faces (JSF) 頁,并使用“通過實體類創建 JSF 頁”向導快速創建一個簡單的 Web 接口。
- 從主菜單中,選擇“文件”>“新建文件”。從“持久性”類別中,選擇“通過實體類創建 JSF 頁”,然后單擊“下一步”。
- 在“新建 - 通過實體類創建 JSF 頁”向導中,單擊“全部添加”以選擇兩個實體類,然后單擊“下一步”。
- 將“JSF 頁文件夾”文本字段保留為空,以便在缺省位置保存 JSF 文件。
- 將 entity 指定為已生成類的包,然后單擊“完成”。
單擊“完成”后,IDE 將生成所需的 JavaServer Faces 文件,以便我們可以運行并測試 ZooApp。
運行項目
在本練習中,我們將部署 ZooApp Web 應用程序項目并測試該應用程序。
- 啟動 Java DB 數據庫,方法是:選擇“工具”>“Java DB 數據庫”>“啟動 Java DB 服務器”。
- 右鍵單擊 "ZooApp" 項目節點,然后選擇“運行項目”。
單擊“運行項目”后,將在瀏覽器中打開一個頁面,您可以通過該頁面包含的菜單,查看場館 (Pavilions) 和動物 (Animals) 的列表。
您還可以添加、編輯或刪除動物 (Animals) 和場館 (Pavilions) 數據。
小結
在本練習中,您生成了為 Java EE 5 平臺開發的 ZooApp Web 應用程序,然后部署并測試了該 Web 應用程序。
疑難解答
下面是您創建項目時可能會遇到的一些問題。
使用“新建 - 通過實體類創建 JSF 頁”向導時的問題
使用該向導通過實體類創建 JSF 頁時,您可能會在向導中看到以下錯誤消息:
"This wizard can only be used in a web project with JSF support."(此向導只能在具有 JSF 支持的 Web 項目中使用。)
如果看到此消息,則需要檢查是否已將 Java Server Faces 框架添加到項目屬性中。通過執行以下操作,可以將 Java Server Faces 支持添加到 Web 項目中:
- 在“項目”窗口中,右鍵單擊 Web 應用程序節點,然后選擇“屬性”。
- 在“項目屬性”對話框的“類別”窗格中選擇“框架”,然后單擊“添加”。
- 在“選擇框架”對話框中,選擇 "Java Server Faces",然后單擊“確定”。
- 在“項目屬性”對話框中,單擊“確定”以關閉窗口。
將 JSF 框架添加到項目屬性后,您應該能夠使用該向導創建 JSF 頁了。
后續步驟
有關使用 NetBeans IDE 5.5 開發 Java EE 應用程序的更多信息,請參見以下資源:
您可以在 Java EE 5 教程中找到有關使用 Java 持久性的詳細信息。
要發送意見和建議、獲得支持以及隨時了解 NetBeans IDE Java EE 開發功能的最新開發情況,請加入 nbj2ee 郵件列表。