众所周知,JPA 不是一个实现;它是持久性的规范。 Hibernate 框架遵循所有规范,并且还具有自己的附加功能。在应用程序中使用 JPA 规范使我们能够在需要时轻松切换持久性提供程序。
单独使用 Hibernate 需要 SessionFactory,而使用带有 JPA 的 Hibernate 需要 EntityManager。我们将使用 JPA,以下是基于 Spring Java 的 Hibernate JPA 配置:
在前面的配置中,我们使用 LocalContainerEntityManagerFactoryBean 类配置了 EntityManager。我们设置 DataSource 以提供有关在何处可以找到我们的数据库的信息。由于我们使用的是 JPA,这是由不同供应商遵循的规范,我们通过设置 HibernateJpaVendorAdapter 和设置供应商特定的附加属性来指定我们在应用程序中使用的供应商。
现在我们已经在我们的应用程序中配置了基于 JPA 的 ORM 框架,让我们看看在使用 ORM 时如何在我们的应用程序中创建 DAO。
以下是 AbstractJpaDAO 类,具有我们所有 DAO 所需的基本通用方法:
下面是AccountDAO类,管理Account实体相关的方法:
前面的 DAO 实现示例非常基础,也是我们通常在应用程序中所做的。如果 DAO 抛出诸如 PersistenceException 之类的异常,而不是向用户显示异常,我们希望向最终用户显示正确的、人类可读的消息。为了在发生异常时提供可读的消息,Spring 提供了一个翻译器,我们需要在我们的配置类中定义如下:
当我们使用 @Repository 注释来注释我们的 DAO 时,BeanPostProcessor 命令起作用。 PersistenceExceptionTranslationPostProcessor bean 将充当 bean 的顾问,这些 bean 使用 @Repository 注释进行注释。请记住,我们在 第 3 章中了解了建议,调整面向方面的编程。当被告知时,它将重新抛出代码中捕获的特定于 Spring 的未经检查的数据访问异常。
因此,这是使用 Hibernate 的 Spring JPA 的基本配置。现在,让我们看看 Spring Data 配置。