FeaturesDocs & SupportCommunityBlogsPartners

将 Hibernate 与 Java 持久性 API 一起使用

如果您使用的是 Java 持久性 API,则可以选择要在应用程序中使用的持久性提供程序。GlassFish 应用服务器附带 Oracle 的 Toplink 持久性提供程序,但您可以方便地将应用程序配置为使用 Hibernate 持久性提供程序,并快速开发可以使用 Java 持久性 API 访问数据库的应用程序。

在开始本教程之前,您可能需要熟悉以下文档:

目录

本页上的内容适用 NetBeans IDE 6.5

要学习本教程,您需要具备以下软件和资源。

软件或资源 要求的版本
NetBeans IDE 6.5 Java
Java Development Kit (JDK) 版本 6 或
版本 5
GlassFish 应用服务器 V2

注意:开始之前,您需要在 IDE 中注册应用服务器。如果应用服务器尚未在 IDE 中注册,请选择“工具”>“服务器”并单击“添加服务器”按钮进行注册。通过打开“服务”窗口,并展开“服务器”节点,可以看到所有已注册的应用服务器。

创建 Web 应用程序项目

在本练习中,您将创建一个简单的 Web 应用程序项目来访问 sample 数据库。该应用程序将使用 JSF Web 界面来查看和修改数据,因此应在创建项目时指定 JSF 框架。

  1. 选择“文件”>“新建项目”(Ctrl-Shift-N)。从 "Java Web" 类别中选择“Web 应用程序”。
  2. 键入 HibernateApp 作为项目名称,并指定一个位置。
  3. 取消选择使用专用文件夹选项(如果已选择)。
    对于本教程,不用将项目库复制到指定文件夹,因为您不需要与其他用户共享库。
    单击“下一步”。单击“下一步”。
  4. 将服务器设置为 GlassFish,并将 Java EE 版本设置为 Java EE 5。单击“下一步”。
  5. 选择 "JavaServer Faces" 框架(而不是 "Visual Web JavaServer Faces")。单击“完成”。

单击“完成”后,IDE 将创建项目,并在编辑器中打开 welcomeJSF.jsp

创建实体类和持久性单元

现在可以使用“通过数据库生成实体类”向导基于捆绑的 sample 数据库中的表创建实体类。sample 数据库是一个 JavaDB 数据库,但是,如果在 IDE 中注册了数据库连接,则可以使用该向导通过任何支持的数据库快速生成实体类。

在向导中创建实体类时,您还可以创建持久性单元,并在该单元中指定如何管理实体。IDE 包括对 Hibernate 的支持,并作为其中一个持久性提供程序选项列出了 Hibernate。选择 Hibernate 作为持久性提供程序时,IDE 会将所需的 Hibernate 库自动添加到项目中。

  1. 在“项目”窗口中,右键单击项目节点,然后选择“新建”>“通过数据库生成实体类”。在“数据源”下拉列表中,选择 jdbc/sample 数据库。如果系统提示您输入用户名和口令,则使用 appapp。从列表中选择 CUSTOMER 表,单击“添加”,然后单击“下一步”。
  2. 将表和类名保留为缺省值,并为包键入 hibernatesample.db
  3. 单击“创建持久性单元”按钮。
  4. 选择 Hibernate 作为持久性提供程序,选择“无”作为表生成策略。保留缺省的持久性单元名称。单击“创建”,以关闭该对话框。
    创建持久性单元对话框
    在向导中单击“下一步”。
  5. 从“关联获取”下拉列表中选择 eager
  6. 从“复合类型”下拉列表中选择 java.util.Set。单击“完成”。
    向导中映射选项的屏幕快照

单击“完成”后,IDE 将为每个选定表创建实体类,并在“配置文件”节点下创建 persistence.xml。您可以打开 persistence.xml,以查看有关持久性单元的详细信息。

因为选择了 Hibernate 作为持久性提供程序,所以 IDE 也将 Hibernate 库添加到了项目中。可以在“项目”窗口中展开“库”节点,以查看 IDE 添加到项目的 Hibernate 库。

添加到项目的 Hibernate 库的屏幕快照

您可以修改 persistence.xml,以添加一些特定于 Hibernate 的属性。

  1. 双击 persistence.xml 在编辑器中打开该文件,然后单击编辑器顶部的 "XML" 按钮以切换到 "XML" 视图。
  2. 修改 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 语句输出到应用服务器的日志文件。

  3. 保存所做的更改。

创建 JSF 页

现在可以使用 "JSF JPA CRUD" 向导快速生成 JSF 页,以显示和修改数据。在向导中选择实体类,向导将为每个实体类生成以下内容:

  • JPA 控制器类
  • JSF 控制器类
  • JSF 转换器类
  • 包含四个 JSP 文件(Detail.jspEdit.jspList.jspNew.jsp)的目录
  • 适用于 faces-config.xml 中的类的受管 Bean 元素、转换器元素和导航规则

向导还自动生成由生成的类使用的异常类和实用程序类。

  1. 右键单击项目节点,然后选择“新建”>“通过实体类创建 JSF 页”。
  2. 单击“全部添加”,将 Customer 类和 DiscountCode 类添加到选定类的列表中。单击“下一步”。
  3. 为 JPA 控制器包键入 hibernatesample.db
  4. 为 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.jspEdit.jspList.jspNew.jsp。IDE 还修改了 welcomeJSF.jsp ,以便将链接插入到每个 List.jsp 页。

如果展开“配置文件”节点,并在 XML 编辑器中打开 faces-config.xml,则可以看到 IDE 为每个控制器类和转换器类插入了受管 Bean 和转换器元素。IDE 还为每个 JSP 插入了导航规则元素,指示导致应用程序导航到该 JSP 的逻辑结果。

创建 JSF 页并修改控制器类中的代码后,您应该能够运行并测试该应用程序。

测试项目

现在,我们需要运行项目来测试应用程序是否正常运行。

  1. 右键单击项目,然后选择“运行项目”。IDE 将启动应用服务器,构建和部署应用程序,并在外部 Web 浏览器中显示 welcomeJSF.jsp
  2. 单击 "Show All Customer Items" 链接,您应该看到以下 Web 页:
    列有客户的 Web 页的屏幕快照
  3. 使用 "New Customer" 链接创建客户。然后在“服务”窗口中右键单击应用服务器节点,然后选择“查看服务器日志”来检查服务器日志。在服务器日志中应列出用于创建客户的 SQL。

 

 

后续步骤

有关在 NetBeans IDE 6.5 中使用 Hibernate 和 Java 持久性 API 开发 Web 应用程序的详细信息,请参见以下资源:

要发送意见和建议、获得支持以及随时了解 NetBeans IDE Java EE 开发功能的最新进展,请加入 nbj2ee@netbeans.org 邮件列表

Companion
Projects:
                  Powered by: