`

JPA 学习

    博客分类:
  • JPA
 
阅读更多
1. Entity
Entity是JPA的主体,它主要有以下几个特点
a) 普通POJO对象,在bean里使用new来创建
b) 无需接口的引用
c) 有一个持久化主键(IDENTITY)
d) 会同时包含持久化和非持久化状态(@Transient)
e) 可以是其他Entity或普通类的子类
f) 必须实现Serializable

Entity ID有如下特点,
a) 是数据库的主键
b) @Id 注解单个域,@GeneratedValue,注解自动生成的主键,可以使用GenerationType=SEQUENCE, TABLE, IDENTITY,AUTO 4种方式。
c) @EmbeddedId注解单个域,@IdClass 表示多个Id域,这两种注解都是用来表示复合主键的,在实现的时候必须实现hashCode和equals方法。并且@IdClass的特点是这两个域里的主键名和类型必须和主Entity里的主键名,类型一致。比如,
public class EmployeePK implements Serializable{
private Integer id;
private String name;
...
}

@Entity
@IdClass(EmployeePK.class)
public class Employee implements Serializable{
  @Id
  private Integer id;
  @Id
  private String name;
}
这两个用法主要的区别在于如果还想对Id有Join或GeneratedValue等更细节的具体操作的时候就必须使用IdClass了

d) 必须在Entity的顶级,或是父类里。

Entity的声明周期和操作如下,
persist() 向数据库里插入Entity
remove() 移除数据库里的Entity
merge() 同步已经detached的Entity的状态
refresh() 重新加载Entity的状态


2. Relation
JPA支持单向和双向的关系,关系包括
One to One
a) 声明fetch=LAZY
b) configure nullable = false
One to Many
是ManyToOne的反向关系,一般用mappedBy实现,这样可以不建中间关系表
a) 声明fetch=EAGER
Many to One
a) 声明fetch=LAZY
Many to Many
a) 声明fetch=EAGER
b) @JoinColumn(name = "PERSON_ID", referencedColumnName = "PERSON_ID") colun name 是本表中的字段,referencedColumnName是对方表中的对应字段名

mappedBy指得是如果在某一个POJO里声明了关系,使用JoinColumn之后在其相对应的POJO里只用声明mappedBy并指定其对应POJO里的变量名就可以完成双向关系。

级联的关系也使用在JPA的操作中,级联关系有PERSIST,REMOVE,MERGE,REFRESH,DETACH,ALL.

@OrderBy 可以使用在@OneToMany或@ManyToOne上来指定不通的顺序
@OrderBy("lastname ASC, age DESC");

3. Inheritance
文章很多,主要是表继承
http://hi.baidu.com/xerophyte000/blog/item/32c7887abed441350dd7da5e.html
http://blog.csdn.net/amos1989/article/details/5407082

4. Eclipselink/Toplink特性
a) EntityListener这个不同于JPA的EntityListener,使用的时候可以获得更多的信息和操作。比如:
Pet pet = (Pet)clientSession.readObject(Pet.class);
UnitOfWork uow = clientSession.getActiveUnitOfWork();
    if (uow == null) {
        uow = clientSession.acquireUnitOfWork(); // Start external transaction
        shouldCommit = true;
    }
    Pet petClone = (Pet) uow.registerObject(pet);
    petClone.setName("Furry");
    if (shouldCommit) {
        uow.commit(); // Ask external transaction controller to commit
    }

UnitOfWork 是Session的子类它的解释为
<li> Allow parallel transactions against a session's objects.
<li> Allow nested transactions.
<li> Not require the application to write objects that is changes, automatically determine what has changed.
<li> Perform a minimal commit/update of all changes that occurred.
<li> Resolve foreign keys for newly created objects and maintain referential integrity.
<li> Allow for the object transaction to use its own object space.
其中registerObjects可以将额外的对象关联到现有的事务中提交。

getActiveUnitOfWork()方法返回的是External JTS transaction。 JTS的解释为
Java Transaction Service (JTS) specifies the implementation of a transaction manager that supports the Java Transaction API (JTA) specification (see JSR 907) at the high level and implements the Java mapping of the OMG Object Transaction Service (OTS) specification at the low level. JTS uses the standard CORBA ORB/TS interfaces and Internet Inter-ORB Protocol (IIOP) for transaction context propagation between JTS transaction managers.

A JTS transaction manager provides transaction services to the parties involved in distributed transactions: the application server, the resource manager, the standalone transactional application, and the Communication Resource Manager
也就是说必须在JTA环境下才可以获得,否则为NULL。


当然也可以用acquireUnitOfWork()来创建一个External Transaction,其流程图为



  • 大小: 18.3 KB
  • 大小: 22.6 KB
分享到:
评论

相关推荐

    JPA学习文档笔记

    ### JPA学习文档知识点概述 #### 1. JPA简介 - **定义**: JPA (Java Persistence API) 是由Sun官方提出的一种Java持久化规范,旨在简化Java应用程序中关系型数据库的操作过程。其核心目标是统一现有的ORM (Object-...

    传智播客JPA学习笔记修改免积分版

    ### 传智播客JPA学习笔记知识点梳理 #### 一、JPA概述与核心价值 - **定义**: JPA (Java Persistence API) 是由 Sun 官方提出的一种 Java 持久化标准,旨在为 Java 开发者提供一套统一的对象-关系映射 (ORM) 工具,...

    JPA源文件/jpa学习

    总之,JPA作为一个强大的ORM框架,为Java开发者提供了统一的、标准的方式来处理数据库操作,而JPA源码的学习可以帮助我们深入了解其内部机制,提高开发效率和代码质量。通过对JPA-2.0.src的学习,我们可以掌握JPA ...

    JPA学习笔记

    【JPA学习笔记】 JPA(Java Persistence API)是Java平台上的一个ORM(Object-Relational Mapping)规范,它提供了一种将Java对象与数据库表进行映射的机制,简化了数据库操作。JPA允许开发者使用面向对象的方式...

    jpa学习路线图 Java持久层API

    JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将...尚硅谷jpa学习路线图思维导图,涵盖了jpa框架从基础知识到高级应用的内容,帮助大家尽快掌握jpa开发。

    jpa学习笔记

    ### JPA 学习笔记详解 #### 一、JPA 概述 Java Persistence API (JPA) 是 Sun 公司提出的一种 Java 持久层标准,它为 Java 开发者提供了一种对象关系映射 (ORM) 的工具来管理 Java 应用程序中的关系型数据。JPA ...

    JPA学习中文文档

    JPA包括以下3方面的技术: RM映射元数据,JPA支持XML和JDK 5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中; JPA 的API,用来操作实体对象,执行CRUD操作,框架...

    JPA学习大全.docx

    **JPA学习大全** 在Java开发中,Spring Data JPA是一个强大的工具,它基于ORM(对象关系映射)框架和JPA(Java Persistence API)规范,为开发者提供了一种简化数据库访问和操作的方式。通过使用Spring Data JPA,...

    JPA学习系列中所有的源文件

    **JPA学习系列中所有的源文件** 在Java开发中,JPA(Java Persistence API)是Java平台上的一个标准,用于管理关系数据库中的数据。它提供了一种对象/关系映射(ORM)工具,使得开发者可以使用面向对象的方式来操作...

    传智播客JPA学习笔记.pdf

    **Java Persistence API (JPA)** 是Java平台上的...以上就是JPA学习笔记中的关键知识点,涵盖了JPA的基本概念、环境配置、对象关系映射、查询语言、事务管理、关联关系等多个方面,对于理解和应用JPA有重要的指导作用。

    Spring Data JPA学习

    Spring Data JPA学习 Spring Data JPA是一个基于Java持久层API(JPA)的存储库实现,它提供了一个简单、统一的方式来访问关系数据库。下面是Spring Data JPA的特征和配置步骤: 一、支持基于Spring和JPA构建存储库...

    Java JPA 学习资料 合集

    JPA 规范部分详细的介绍了 JPA 中实体 Bean 的定义,并介绍了实体 Bean 支持的注释、全新的查询语言、实体管理接口、容器实现规范等内容。 JPA 标准制定过程中充分吸收了目前已经出现的所有持久化技术的所有优点,...

    jpa 全面学习资料

    JPA学习笔记** 学习笔记可能涉及更深入的话题,如: - **懒加载(Lazy Loading)与急加载(Eager Loading)**: 管理关联对象的加载时机。 - **继承映射(Inheritance Mapping)**: 包括单表继承、联合继承和表格...

    jpa学习总结,pdf类型的,详细介绍了jpa的应用

    ### JPA学习总结知识点 #### 1. 什么是JPA? JPA (Java Persistence API) 是Sun官方提出的一种Java持久化规范,旨在为Java开发者提供一种便捷的方式去管理和操作Java应用中的关系型数据。它的主要目标是简化现有的...

    JPA学习小例子

    在"JPA学习小例子"中,我们可以通过`TestJPA`这个测试类来深入理解JPA的核心概念和用法。首先,我们需要引入JPA的相关依赖,这通常是在Maven或Gradle的构建文件中完成的,比如在Maven的`pom.xml`中添加`spring-boot-...

    传智播客——JPA学习笔记

    传智播客——JPA学习笔记 网络上有一份pdf格式的《JPA学习笔记》,但是内容排版有点乱,而且有缺失的部分,小弟从原来的blog处拷贝出来,并加以排版,制作成了chm格式的,大家应该知道chm格式比较适合作为参考资料或...

Global site tag (gtag.js) - Google Analytics