简介:
Java持久化规范,是从EJB2.x以前的实体Bean(Entity bean)分离出来的,EJB3以后不再有实体bean,而是将实体bean放到JPA中实现。JPA是sun提出的一个对象持久化规范,各JavaEE应用服务器自主选择具体实现,JPA的设计者是Hibernate框架的作者, 它吸取了目前Java持久化技术的优点,旨在规范、简化Java对象的持久化工作。使用JPA持久化对象,并不是依赖于某一个ORM框架。因此Hibernate是它的一种实现。除了Hibernate,还有EclipseLink(曾经的toplink),OpenJPA等可供选择,所以使用Jpa的一个好处是,可以更换实现而不必改动太多代码。
Hibernate作为JPA的一种实现,jpa的注解已经是hibernate的核心,hibernate只提供了一些补充,而不是两套注解。hibernate对jpa的支持够足量,在使用hibernate注解建议使用jpa。
Hibernate作为JPA的一种实现,jpa的注解已经是hibernate的核心,hibernate只提供了一些补充,而不是两套注解。hibernate对jpa的支持够足量,在使用hibernate注解建议使用jpa。
JPA优势所在:
1 标准化
2 对容器级特性的支持
3 简单易用,集成方便
4 可媲美JDBC的查询能力
5 支持面向对象的高级特性(如类之间的继承、多态和类之间的复杂关系)
实战:
1、JPA的持久化策略文件:
根据JPA规范要求,在实体bean应用中,需要在应用类路径(classpath)的META-INF目录下加入持久化配置文件——persistence.xml,该文件就是持久化策略文件。其内容如下:
<?xml version="1.0" encoding="UTF-8"?> <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> <persistence-unit name="持久化单元名" transaction-type="JTA"> <jta-data-source>使用JCA部署在javaEE服务器上的数据源JNDI</jta-data-source> <!--指定JPA实现提供者,不指定就采用JavaEE服务器默认的JPA提供者,这里以 OpenJPA为例--> <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider> <class>实体bean全路径名</class> …… <properties> <!--配置JPA实现提供者的一些信息--> </properties> </persistence-unit> </persistence>
2、实体Bean的开发:
JPA规范中定义的实体bean开发的基本规范:
(1).在实体bean上添加”@Entity”注解,标识该bean为实体bean。
(2).实体bean必须序列化。
(3).使用”@Table(name=数据库表名)”注解,标识该实体bean映射到关系型数据库中的表名,如果不指定则JPA实现会自动生成默认的表名称。
(4).必须有一个使用”@Id”注解标识的主键,如指定自增主键的写法为:
@Id @Column(name=”列名”) @GeneratedValue(Strategy=GenerationType.Auto) private int id;
注意:@Id和@GeneratedValue两个注解必须同时使用,标识了注解之后,要主键的生成策略。
(5).Bean的其他属性使用”@Column(name=列名)”注解,指定该属性映射到数据库表中的列名,如果不指定在JPA实现会自动生成默认的列名。
(6).实体Bean必须严格遵循JavaBean的规范,提供无参的默认构造方法,属性提供set和get方法。
(7).最好重写hashcode()和equals()方法,实体bean的唯一标识是主键,因此,使用实体bean的主键来比较。
3、实体bean的主键生成策略:
实体bean的注解生成策略使用”@GeneratedValue”注解来指定主键的生成策略,默认使用Auto自增的策略,JPA不支持Hibernate的UUID主键生成策略,若要使用Hibernate的UUID做主键方式,方法如下:
(1).将Hibernate.annotation jar包加入到类路径下。
(2).在使用”@Id”的字段上同时加入如下的注解:
@GeneratedValue(generator=”UUID主键生成策略”) @GenericGenerator(name=” UUID主键生成策略”, strategy=”uuid”)
还有多种关联映射关系,我已在另一篇文章中做过总结:JPA几种关联映射