java持久化API

一、简介

JPA(java持久化API)以Enitity为核心,主要功能是将实体映射到底层数据库表,然后通过在应用程序中使用JPA的EntityManager来操作Entity,而JPA实现则将这种操作转换为对底层数据表的操作。

JPA是规范,并不是任何具体的ORM框架,所以在系统中使用JPA时,只是用的规范,具体还是会有一种ORM的实现,例如Hiernate,TopLink等。

如图所示是JPA和ORM框架之间的关系

二、JPA规范简介

JPA操作过程中,最常用的三种组件:

1、实体

实体其实就是一个普通的POJO(简单的Java对象(Plain
Old Java Objects)实际就是普通JavaBeans)只是为它增加了orm.xml映射文件或Annotation,通过使orm.xml映射文件或注解即可创建实体和底层数据表之间的对应关系。

2、EntityManger

实体只是和底层数据表具有映射关系的简单java对象,本身并没有任何持久化的能力,只有使用EntityManager来对实体进行操作室,JPA规范才可以将这种操作转换为对底层数据库的操作,所以EntityManger的作用类似于Hibernate框架中的Session。

3、JPQL查询

类似于Hibernate提供hql查询一样,JPA提供了JPQL查询语句,查询语句简单易用,可以非常方便地检索以保存的的实体。JPA提供了一个Query接口来执行查询,EntityManager根据已有的JPQL来创建Query对象,然后由Query对象来执行查询。

三、JPA规范中的实体

在JPA规范中涉及两个常用的概念,持久化上下文(persistence
context)和持久化单元(persistence unit)

1、持久化上下文

持久化上下文是一组处于托管状态下实体所组合的集合,它处于EnitityManager的管理之下,因此应用程序可以通过EntittyManager与持久化上下文进行交互,当应用程勋改变了持久化上下文中的实体状态后,EntityManager将会根据指定的flush模式将实体的状态写进底层数据库。

2、持久化单元

持久化单元是由配置文件定义的。我理解的也不是很多,以后再做详细介绍。

3、实体的状态

与hibernate类似,JPA规范中的实体也有几种对象状态

(1)新建:实体有new操作创建,但是还没有与EntityManger关联过的实体被认为处于新建的状态,新建状态不会被持久化到数据库中。

(2)托管:托管状态下的实体在数据库中有对应的记录,并拥有一个持久化标识,托管状态下的实体可以是刚刚保存的,也可以是刚刚被加载的,无论哪一种,托管实体都是在EntityManager的管理之下的,JPA会自动检测处于托管状态下实体的改动,当程序修改托管实体的属性时,JPA负责将这种修改转换为对数据库记录的修改。

(3)脱管:如果一个实体曾经处于托管状态,那么他是有一个持久化标识的,但随着与之关联的EntityManager被关闭,该实体变化就成了脱管状态,脱管状态下实体的引用依然有效,只是实体脱离了EntityManager的管理。

(4)被删除:当EntityManager调用remove方法删除指定实体后,该实体进入被删除状态,被删除的实体还关联着某个持久化上下文,而且它对应的记录即将从数据库中删除。

实体状态的演化图:

关于JPA的知识还有很多,这里只是皮毛,不过和之前学过的Hibernate对比学习,也就没有那么陌生了,下次博客将会介绍jpa的映射关系。

时间: 2024-10-12 02:40:34

java持久化API的相关文章

JavaEE Tutorials (8) - Java持久化API介绍

8.1实体96 8.1.1实体类的需求97 8.1.2实体类中的持久化字段和属性97 8.1.3实体的主键101 8.1.4实体关系中的多重性103 8.1.5实体关系中的方向103 8.1.6实体中的可嵌入类1058.2实体继承106 8.2.1抽象实体106 8.2.2映射超类106 8.2.3非实体超类107 8.2.4实体继承映射策略1078.3管理实体109 8.3.1EntityManager接口109 8.3.2持久化单元1138.4查询实体1148.5数据库模式创建114 8.5

关于注解-Hebernate与JPA(java persistence api)

The JPA spec. defines the JPA annotation in the javax.persistence package. Hibernate not only implements JPA spec , but extends it to adds more features . So , hibernate creates their own annotations which just extend the JPA annotation with the Hibe

持久化API(JPA)系列(八)实体关系映射(ORM)之单表映射@EmbeddedId

接上文<持久化API(JPA)系列(七)实体关系映射(ORM)之单表映射@IdClass> 本文将介绍<联合主键:使用@EmbeddedId嵌入外部主键> 上文是通过@IdClass引用外部主键,联合主键也可以采用嵌入式主键替代. 1)新建外部主键类Family2.java 设置联合主键man和woman,因此外部主键也需要定义两个相同的变量,并添加一个以两个变量为输入的构造函数,同时添加getter/setter函数. 主键类必须满足: 1.必须实现Serializable接口,

全面挖掘Java Excel API 使用方法

使用Windows操作系统的朋友对Excel(电子表格)一定不会陌生,但是要使用Java语言来操纵Excel文件并不是一件容易的事.在Web应用日益盛行的今天,通过Web来操作Excel文件的需求越来越强烈,目前较为流行的操作是在JSP或Servlet 中创建一个CSV (comma separated values)文件,并将这个文件以MIME,text/csv类型返回给浏览器,接着浏览器调用Excel并且显示CSV文件.这样只是说可以访问到Excel文件,但是还不能真正的操纵Excel文件,

新增的Java MapReduce API

http://book.51cto.com/art/201106/269647.htm Hadoop的版本0.20.0包含有一个新的 Java MapReduce API,有时也称为"上下文对象"(context object),旨在使API在今后更容易扩展.新的API 在类型上不兼容先前的API,所以,需要重写以前的应用程序才能使新的API发挥作用. 新增的API 和旧的API 之间,有下面几个明显的区别. 新的API 倾向于使用虚类,而不是接口,因为这更容易扩展.例如,可以无需修改

Atitit. C# java 的api 目录封装结构映射总结

Atitit. C#  java 的api 目录封装结构映射总结 C# java ref System.Reflection System.Type, java.lang.ref concurrent thread System.Threading java.lang.Thread collection System.collection java.util.collection Io Sys.io sys.text sys.xml sys.data.sql sys.data sys.web s

Java 2D API - 2. Graphics 入门

Java 2D API强大而复杂,不过大多时候我们只需使用java.awt.Graphcis类的部分功能.下面的内容将覆盖大多数的常见应用. Graphics 类中的方法大致可以分为两类: Draw and fill方法,用于绘制基本的图形.文本和图像: 属性设置方法,用于控制绘制和填充的效果.setFont()和setColor()等方法就属于这类方法. 下图显示这些方法和图像的对应关系: 1. drawString() 用于绘制文本: g.drawString("Hello", 1

Java 2D API - 1. 基本概念

Java 2D API扩展AWT包,对二维图形.文本及成像功能提供了支持,可用于开发复杂的界面.绘图软件和图像编辑器.Java 2D对象位于用户坐标空间(User coordinate space),当对象呈现在屏幕或打印机,用户空间坐标转换为设备空间坐标(device space coordinate).下面两个类对 Java 2D API十分重要: Graphics Graphics2D Java 2D API提供了如下功能: 为显示设备和打印机等提供了统一的渲染模型: 提供了大量的几何图元

Java Logging API - Tutorial

Java Logging This article describes how to use the Logging API in Java programs. It includes an example for creating an HTML logger. Table of Contents 1. Overview 1.1. Logging 1.2. Logging in Java 1.3. Create a logger 1.4. Level 1.5. Handler 1.6. For