将 Hibernate 与 Java 持久性 API 一起使用
如果您使用的是 Java 持久性 API,则可以选择要在应用程序中使用的持久性提供程序。GlassFish 应用服务器附带 Oracle 的 Toplink 持久性提供程序,但您可以方便地将应用程序配置为使用 Hibernate 持久性提供程序,并快速开发可以使用 Java 持久性 API 访问数据库的应用程序。
在开始本教程之前,您可能需要熟悉以下文档:
目录

要学习本教程,您需要具备以下软件和资源。
注意:开始之前,您需要在 IDE 中注册应用服务器。如果应用服务器尚未在 IDE 中注册,请选择“工具”>“服务器”并单击“添加服务器”按钮进行注册。通过打开“服务”窗口,并展开“服务器”节点,可以看到所有已注册的应用服务器。
创建 Web 应用程序项目
在本练习中,您将创建一个简单的 Web 应用程序项目来访问 sample 数据库。该应用程序将使用 JSF Web 界面来查看和修改数据,因此应在创建项目时指定 JSF 框架。
- 选择“文件”>“新建项目”(Ctrl-Shift-N)。从 "Java Web" 类别中选择“Web 应用程序”。
- 键入 HibernateApp 作为项目名称,并指定一个位置。
- 取消选择使用专用文件夹选项(如果已选择)。
对于本教程,不用将项目库复制到指定文件夹,因为您不需要与其他用户共享库。
单击“下一步”。单击“下一步”。
- 将服务器设置为 GlassFish,并将 Java EE 版本设置为 Java EE 5。单击“下一步”。
- 选择 "JavaServer Faces" 框架(而不是 "Visual Web JavaServer Faces")。单击“完成”。
单击“完成”后,IDE 将创建项目,并在编辑器中打开 welcomeJSF.jsp。
创建实体类和持久性单元
现在可以使用“通过数据库生成实体类”向导基于捆绑的 sample 数据库中的表创建实体类。sample 数据库是一个 JavaDB 数据库,但是,如果在 IDE 中注册了数据库连接,则可以使用该向导通过任何支持的数据库快速生成实体类。
在向导中创建实体类时,您还可以创建持久性单元,并在该单元中指定如何管理实体。IDE 包括对 Hibernate 的支持,并作为其中一个持久性提供程序选项列出了 Hibernate。选择 Hibernate 作为持久性提供程序时,IDE 会将所需的 Hibernate 库自动添加到项目中。
- 在“项目”窗口中,右键单击项目节点,然后选择“新建”>“通过数据库生成实体类”。在“数据源”下拉列表中,选择 jdbc/sample 数据库。如果系统提示您输入用户名和口令,则使用 app 和 app。从列表中选择 CUSTOMER 表,单击“添加”,然后单击“下一步”。
- 将表和类名保留为缺省值,并为包键入 hibernatesample.db。
- 单击“创建持久性单元”按钮。
- 选择 Hibernate 作为持久性提供程序,选择“无”作为表生成策略。保留缺省的持久性单元名称。单击“创建”,以关闭该对话框。
在向导中单击“下一步”。
- 从“关联获取”下拉列表中选择 eager。
- 从“复合类型”下拉列表中选择 java.util.Set。单击“完成”。

单击“完成”后,IDE 将为每个选定表创建实体类,并在“配置文件”节点下创建 persistence.xml。您可以打开 persistence.xml,以查看有关持久性单元的详细信息。
因为选择了 Hibernate 作为持久性提供程序,所以 IDE 也将 Hibernate 库添加到了项目中。可以在“项目”窗口中展开“库”节点,以查看 IDE 添加到项目的 Hibernate 库。

您可以修改 persistence.xml,以添加一些特定于 Hibernate 的属性。
- 双击 persistence.xml 在编辑器中打开该文件,然后单击编辑器顶部的 "XML" 按钮以切换到 "XML" 视图。
- 修改 XML 以添加以下属性。
<persistence-unit name="HibernateApp" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>jdbc/sample</jta-data-source>
<properties>
<property name="hibernate.show_sql" value="true" />
</properties>
</persistence-unit>
</persistence>
此属性可以将所有 SQL 语句输出到应用服务器的日志文件。
- 保存所做的更改。
创建 JSF 页
现在可以使用 "JSF JPA CRUD" 向导快速生成 JSF 页,以显示和修改数据。在向导中选择实体类,向导将为每个实体类生成以下内容:
- JPA 控制器类
- JSF 控制器类
- JSF 转换器类
- 包含四个 JSP 文件(Detail.jsp、Edit.jsp、List.jsp 和 New.jsp)的目录
- 适用于 faces-config.xml 中的类的受管 Bean 元素、转换器元素和导航规则
向导还自动生成由生成的类使用的异常类和实用程序类。
- 右键单击项目节点,然后选择“新建”>“通过实体类创建 JSF 页”。
- 单击“全部添加”,将 Customer 类和 DiscountCode 类添加到选定类的列表中。单击“下一步”。
- 为 JPA 控制器包键入 hibernatesample.db。
- 为 JSF 类包键入 hibernatesample.jsf。单击“完成”。
单击“完成”后,IDE 会立即在 hibernatesample.db 包中为每个实体类创建 JPA 控制器类。每个控制器类都会处理相应实体类的操作,其中包括通过 Java 持久性 API 创建、编辑和销毁实体类的实例。IDE 在 hibernatesample.db.exceptions 包中生成异常类,来处理由 JPA 控制器类抛出的异常。
对于每个实体类,IDE 还在 hibernatesample.jsf 包中创建了 JSF 转换器类和控制器类。每个 JSF 转换器类可实现由 JavaServer Faces 定义的 javax.faces.convert.Converter 接口,并执行将相应实体类的实例转换为 String 对象的操作,反之亦然。IDE 在 hibernatesample.jsf.util 包中生成三个实用程序类,其中包含由 JSF 控制器使用的常规 JSF 逻辑。

如果展开“Web 页”节点,则可以看到 IDE 为每个实体类生成了文件夹。每个文件夹均包含以下文件:Detail.jsp、Edit.jsp、List.jsp 和 New.jsp。IDE 还修改了 welcomeJSF.jsp ,以便将链接插入到每个 List.jsp 页。
如果展开“配置文件”节点,并在 XML 编辑器中打开 faces-config.xml,则可以看到 IDE 为每个控制器类和转换器类插入了受管 Bean 和转换器元素。IDE 还为每个 JSP 插入了导航规则元素,指示导致应用程序导航到该 JSP 的逻辑结果。
创建 JSF 页并修改控制器类中的代码后,您应该能够运行并测试该应用程序。
测试项目
现在,我们需要运行项目来测试应用程序是否正常运行。
- 右键单击项目,然后选择“运行项目”。IDE 将启动应用服务器,构建和部署应用程序,并在外部 Web 浏览器中显示 welcomeJSF.jsp。
- 单击 "Show All Customer Items" 链接,您应该看到以下 Web 页:

- 使用 "New Customer" 链接创建客户。然后在“服务”窗口中右键单击应用服务器节点,然后选择“查看服务器日志”来检查服务器日志。在服务器日志中应列出用于创建客户的 SQL。
后续步骤
有关在 NetBeans IDE 6.5 中使用 Hibernate 和 Java 持久性 API 开发 Web 应用程序的详细信息,请参见以下资源:
要发送意见和建议、获得支持以及随时了解 NetBeans IDE Java EE 开发功能的最新进展,请加入 nbj2ee@netbeans.org 邮件列表。