JPA总结

简介: 

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

时间: 2024-10-28 07:28:07

JPA总结的相关文章

利用EJB 3.0的JPA设计企业应用程序

本文将介绍Java Platform,Enterprise Edition(Java EE 5)的一种设计方法 ,它利用了Enterprise JavaBeans(EJB) 3.0 新的Java Persistence API (JPA) .JPA 提供了一种标准的对象关系映射解决方案,该解决方案避免了依赖第三方 框架(如 Hibernate).您将看到示例应用程序的详细内容,其中验证了本方法 并阐明关键设计决定. 期待已久的下一版本Java EE 5即将发布.Java EE 5许多新功能都包含

解决spring jpa中配置文件报&#039;jpa:repositories&#039;的问题

一.问题描述     使用spring jpa,报no declaration can be found for element 'jpa:repositories'错误的解决方案     Multiple annotations found at this line: - cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'jpa:reposi

不能用SQL语句-如何用JPA动态查询查询复杂数据

问题描述 如何用JPA动态查询查询复杂数据 我想问的就是怎么用JPA动态查询查询复杂数据 如SELECT IFNULL(sum(i.INVENTORY_AMOUNT)0) FROM INVENTORY i WHERE i.VEN_ID = ?1 and i.ITEM_MYID = ?2 and i.DID is null. 解决方案 http://leobluewing.iteye.com/blog/1969621 解决方案二: 数据查询(3)-复杂查询jpa动态查询杂记JPA中的动态查询与指定

利用CDI和JPA开发Servlet应用

开始之前 关于 CDI JSR-299 规范原来叫做 Web Beans,其主要目的是为了整合 JSF 和 EJB .到 2009 年正式发布该规范时,JSR-299 已经改称 "Contexts and Dependency Injection for the Java EE platform"(简称 CDI ),整合 JSF 和 EJB 仍是其目的,但这并非 CDI 的唯一功能. 通读 JSR-299 规范的文本,描述最多的是依赖注入(Dependency Injection, D

网络相册开发(4)——Spring中配置JPA

在src/META-INF下添加persistence.xml 1.<?xml version="1.0" encoding="UTF-8"?>2.<persistence xmlns="http://java.sun.com/xml/ns/persistence"3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"4. xsi:schemaLoca

JPA中的主键生成策略

Table 策略 (Table strategy) 这种策略中,持久化引擎 (persistence engine) 使用关系型数据库中的一个表 (Table) 来生成主键.这种策略可移植性比较好,因为所有的关系型数据库都支持这种策略.不同的 J2EE 应用服务器使用 不同的持久化引擎. 下面用一个例子来说明这种表生成策略的使用: 清单 1.Table 生成策略 @Entity public class PrimaryKey_Table { @TableGenerator(name = "PK_

Hibernate及JPA 对象关系映射的简单映射策略

简单映射 近年来 ORM(Object-Relational Mapping,对象关系映射,即实体对象和数据库表的映射)技术市场 热闹非凡,各种各样的持久化框架应运而生,其中影响最大的是 Hibernate 和 Toplink.Sun 公司在充分吸收现有的优秀 ORM 尤其是 Hibernate 框架设计思想的基础上,制定了新的 JPA(Java Persistence API)规范,对现在乱象丛生的持久 化市场带来一个标准,大有统一持久化市场的气势.JPA 是通过 JDK5.0 注解或 XML

Hibernate及JPA对象关系映射:关联关系映射策略

关联关系映射 关联关系映射,是映射关系中比较复杂的一种映射关系,总的说来有一对一.一对多和多对多几种 关系.细分起来他们又有单向和双向之分.下面我们逐一介绍一下. 单向 OneToOne 单向一对一是关联关系 映射中最简单的一种,简单地说就是可以从关联的一方去查询另一方,却不能反向查询.我们用下面的例子来举例说明,清 单 1 中的 Person 实体类和清单 2 中的 Address 类就是这种单向的一对一关系,我们可以查询一个 Person 的对应的 Address 的内容,但是我们却不能由一

基于flex4技术从零开发flex博客系统:7 Using JPA

App engine java在数据存储方面不仅支持JDO,还支持JPA.第4,5课我们存储数据使用的是JDO,这一课看一下如果使用JPA. 一,Using JPA 打开gapp_flexblog项目,在src/META-INF/目录下,添加persistence.xml文件,内容如下: <?xml version="1.0" encoding="UTF-8" ?> <persistence xmlns="http://java.sun.

集成JPA与pureQuery: 让Java Persistence API利用DB2静态执行

IBM WebSphere Application Server V7 交付了对其 Java Persistence API (JPA) 实现的增强,支持对 IBM DB2 数据服务器数据访问的优化,以提高安全性,并具备显著降低 数据访问开销的潜力.实现优化的方式是通过使用 WebSphere JPA 与 IBM Data Studio pureQuery 运行 时之间的内置集成来支持静态 SQL 访问--这一切全都不需要更改应用程序代码或运行广泛 的测试用例. 引言 IBM WebSphere