原文地址:
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 邮件列表。