JPA总结

  1. 云栖社区>
  2. 博客>
  3. 正文

JPA总结

dandan911217 2015-12-15 11:31:00 浏览1736
展开阅读全文

简介: 

       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几种关联映射

网友评论

登录后评论
0/500
评论
dandan911217
+ 关注