发布时间 : 星期二 文章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”命名标签,且使用
? 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\