jpatemplate 联系客服

发布时间 : 星期二 文章jpatemplate更新完毕开始阅读49d6cf698e9951e79b8927c1

8.4 集成JPA

JPA全称为Java持久性API(Java Persistence API),JPA是Java EE 5标准之一,是一个ORM规范,由厂商来实现该规范,目前有Hibernate、OpenJPA、TopLink、EclipseJPA等实现。

8.4.1 如何集成

Spring目前提供集成Hibernate、OpenJPA、TopLink、EclipseJPA四个JPA标准实现。

Spring通过使用如下Bean进行集成JPA(EntityManagerFactory):

? LocalEntityManagerFactoryBean:适用于那些仅使用 JPA进行数据访问的

项目,该FactoryBean将根据JPA PersistenceProvider自动检测配置文件进

行工作,一般从“META-INF/persistence.xml”读取配置信息,这种方式 最简单,但不能设置Spring中定义的DataSource,且不支持Spring管理的全局事务,而且JPA 实现商可能在JVM启动时依赖于VM agent从而允许它们进行持久化类字节码转换(不同的实现厂商要求不同,需要时阅读其文档),不建议使用这种方式;

persistenceUnitName:指定持久化单元的名称; 使用方式:

java代码:

Java代码

1.

.LocalEntityManagerFactoryBean\

2.

3.

? 从JNDI中获取:用于从Java EE服务器获取指定的EntityManagerFactory,

这种方式在进行Spring事务管理时一般要使用JTA事务管理;

使用方式:

java代码:

Java代码

1.

5. http://www.springframework.org/schema/beans

6. http://www.springframework.org/schema/beans/spring-beans-3.0

.xsd

7. http://www.springframework.org/schema/jee

8. http://www.springframework.org/schema/jee/spring-jee-3.0.xsd\

>

9.

/persistenceUnit\10.

此处需要使用“jee”命名标签,且使用标签进行JNDI查找,“jndi-name”属性用于指定JNDI名字。

? LocalContainerEntityManagerFactoryBean:适用于所有环境的

FactoryBean,能全面控制EntityManagerFactory配置,如指定Spring定义的DataSource等等。

persistenceUnitManager:用于获取JPA持久化单元,默认实现DefaultPersistenceUnitManager用于解决多配置文件情况

dataSource:用于指定Spring定义的数据源;

persistenceXmlLocation:用于指定JPA配置文件,对于对配置文件情况请选择设置persistenceUnitManager属性来解决;

persistenceUnitName:用于指定持久化单元名字;

persistenceProvider:用于指定持久化实现厂商类;如Hibernate为org.hibernate.ejb.HibernatePersistence类;

jpaVendorAdapter:用于设置 实现厂商JPA实现的特定属性,如设置

Hibernate的是否自动生成DDL的属性generateDdl;这些属性是厂商特定的,因此最好在这里设 置;目前Spring提供HibernateJpaVendorAdapter、OpenJpaVendorAdapter、 EclipseLinkJpaVendorAdapter、

TopLinkJpaVendorAdapter、OpenJpaVendorAdapter 四个实现。其中最重要的属性是“database”,用来指定使用的数据库类型,从而能根据数据库类型来决定比如如何将数据库特定异常转换为Spring的一致性异常,目前支持如下数据库(DB2、DERBY、H2、HSQL、INFORMIX、MYSQL、ORACLE、POSTGRESQL、SQL_SERVER、SYBASE)。

jpaDialect:用于指定一些高级特 性,如事务管理,获取具有事务功能的连接对象等,目前Spring提供HibernateJpaDialect、OpenJpaDialect 、

EclipseLinkJpaDialect、TopLinkJpaDialect、和DefaultJpaDialect实现,注意 DefaultJpaDialect不提供任何功能,因此在使用特定实现厂商JPA实现时需要指定JpaDialect实现,如使用Hibernate就 使用HibernateJpaDialect。当指定

jpaVendorAdapter属性时可以不指定jpaDialect,会自动设置相应的JpaDialect实现;

jpaProperties和jpaPropertyMap:指定JPA属性;如Hibernate中指定是否显示SQL的“hibernate.show_sql”属性,对于jpaProperties设置的属性自动会放进jpaPropertyMap中;

loadTimeWeaver:用于指定LoadTimeWeaver实现,从而允许JPA 加载时修改相应的类文件。具体使用得参考相应的JPA规范实现厂商文档,如Hibernate就不需要指定loadTimeWeaver。

接下来学习一下Spring如何集成JPA吧:

1、准备jar包,从下载的hibernate-distribution-3.6.0.Final包中获取如下Hibernate需要的jar包从而支持JPA:

lib\\jpa\\hibernate-jpa-2.0-api-1.0.0.Final.jar //用于支持JPA

2、对象模型定义,此处使用UserModel2:

java代码:

Java代码

1. package cn.javass.spring.chapter8; 2. //省略import

3. @Entity

4. @Table(name = \5. public class UserModel2 {

6. @Id @GeneratedValue(strategy = GenerationType.AUTO) 7. private int id;

8. @Column(name = \9. private String myName; 10. //省略getter和setter 11. }

注意此处使用的所有注解都是位于javax.persistence包下,如使用

@org.hibernate.annotations.Entity 而非@javax.persistence. Entity将导致JPA不能正常工作。

1、 JPA配置定义(chapter8/persistence.xml),定义对象和数据库之间的映射:

java代码:

Java代码

1.

2.

3. xmlns=\

4. xmlns:xsi=\

5. xsi:schemaLocation=\

http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd\

6.

URCE_LOCAL\