JPA 2.0是在Java EE 6当中新引入的Java持久化API。JPA 2.0带来了许多新特性和增强,其中包括对象/关系映射增强,Java持久化查询语言增强,一种新的基于标准的查询API,以及对悲观锁的支持。
支持悲观锁
锁是处理数据库事务并发的一种技术,当两个或更多数据库事务并发地访问相同数据时,锁可以保证同一时间只有一个事务可以修改数据。
锁的方法通常有两种:乐观锁和悲观锁。乐观锁认为多个并发事务之间很少出现冲突,也就是说不会经常出现同一时间读取或修改相同数据,在乐观锁中,其目标是让并发事务自由地同时得到处理,而不是发现或预防冲突。两个事务在同一时刻可以访问相同的数据,但为了预防冲突,需要对数据执行一次检查,检查自上次读取数据以来发生的任何变化。
悲观锁认为事务会经常发生冲突,在悲观锁中,读取数据的事务会锁定数据,在前面的事务提交之前,其它事务都不能修改数据。
JPA 1.0只支持乐观锁,你可以使用EntityManager类的lock()方法指定锁模式的值,可以是READ或WRITE,如:
EntityManager em = ... ;
em.lock (p1, READ);
对于READ锁模式,JPA实体管理器在事务提交前都会锁定实体,检查实体的版本属性确定实体自上次被读取以来是否有更新,如果版本属性被更新了,实体管理器会抛出一个OptimisticLockException异常,并回滚事务。
对于WRITE锁模式,实体管理器执行和READ锁模式相同的乐观锁操作,但它也会更新实体的版本列。
JPA 2.0增加了6种新的锁模式,其中两个是乐观锁。JPA 2.0也允许悲观锁,并增加了3种悲观锁,第6种锁模式是无锁。
下面是新增的两个乐观锁模式:
1、OPTIMISTIC:它和READ锁模式相同,JPA 2.0仍然支持READ锁模式,但明确指出在新应用程序中推荐使用OPTIMISTIC。
2、OPTIMISTIC_FORCE_INCREMENT:它和WRITE锁模式相同,JPA 2.0仍然支持WRITE锁模式,但明确指出在新应用程序中推荐使用OPTIMISTIC_FORCE_INCREMENT。
下面是新增的三个悲观锁模式:
1、PESSIMISTIC_READ:只要事务读实体,实体管理器就锁定实体,直到事务完成锁才会解开,当你想使用重复读语义查询数据时使用这种锁模式,换句话说就是,当你想确保数据在连续读期间不被修改,这种锁模式不会阻碍其它事务读取数据。
2、PESSIMISTIC_WRITE:只要事务更新实体,实体管理器就会锁定实体,这种锁模式强制尝试修改实体数据的事务串行化,当多个并发更新事务出现更新失败几率较高时使用这种锁模式。
3、PESSIMISTIC_FORCE_INCREMENT:当事务读实体时,实体管理器就锁定实体,当事务结束时会增加实体的版本属性,即使实体没有修改。
你也可以指定新的锁模式NONE,在这种情况下表示没有锁发生。
JPA 2.0也提供了多种方法为实体指定锁模式,你可以使用EntityManager的lock() 和 find()方法指定锁模式。此外,EntityManager.refresh()方法可以恢复实体实例的状态。
下面的代码显示了使用PESSIMISTIC_WRITE锁模式的悲观锁:
// read
Part p = em.find(Part.class, pId);
// lock and refresh before update
em.refresh(p, PESSIMISTIC_WRITE);
int pAmount = p.getAmount();
p.setAmount(pAmount - uCount);
在这个例子中,它首先读取一些数据,然后应用PESSIMISTIC_WRITE锁,在更新数据之前调用EntityManager.refresh()方法,当事务更新实体时,PESSIMISTIC_WRITE锁锁定实体,其它事务就不能更新相同的实体,直到前面的事务提交。
更多JPA 2.0的新特性
除了前面描述的增强和新特性外,JPA 2.0可以使用Bean验证自动验证实体,这意味着你可以在实体上指定一个约束,例如,实体中字段的最大长度为15,当实体持久化,更新或移除时自动验证字段,你可以在persistence.xml配置文件中使用<validation-mode>元素指定自动验证生效的周期。
分享到:
相关推荐
在本项目中,我们关注的是基于J2EE技术构建的博客系统。J2EE(Java 2 Platform, Enterprise Edition)是Java平台上的企业级应用框架...通过实施这个项目,开发者可以深入理解J2EE平台的特性,提升企业级应用开发能力。
DAO(数据访问对象)模式是一种软件设计模式,用于封装对数据库的操作,使得业务逻辑层与数据访问层分离,提高代码的复用性和可维护性。DAO接口定义了所需的数据操作,而其实现类则负责具体的数据库交互。 ACID...
### J2EE武功秘籍 #### 第一层:Java SE 技术招式辨析 **1. InputStream/OutputStream 和 Reader/Writer** - **InputStream/OutputStream**:主要用于处理字节流,适用于二进制数据的读写操作。例如,读取图片、...
- **继承**:继承允许创建一个新类(子类),该类继承了现有类(父类)的所有特性。这有助于代码重用和扩展已有功能。 - **多态**:多态是指同一个行为可以具有多种形态。在Java中,多态可以通过方法重写和接口实现...
首先,J2EE集群是一种服务器部署模式,其中多个J2EE服务器实例(节点)协同工作,形成一个整体的逻辑服务器。集群的主要目标是通过负载均衡分散请求,提高系统的容错性和伸缩性。当一个服务器实例出现故障时,其他...
第七版进一步更新了内容,增加了对Java 5新特性的详细介绍。 - **核心知识点**: - 泛型编程的基础知识 - 异常处理的最佳实践 - I/O流的新特性 - Java集合框架的使用技巧 - 线程并发控制机制 #### 3. ...
### Java-J2EE Job Interview知识点概览 #### 一、Java基础知识点 1. **Java基础知识**: - Java语言特点:面向对象、平台无关性、自动垃圾回收、安全性等。 - 数据类型:基本数据类型(如int、double)与引用...
此外,使用设计模式如工厂模式和单例模式,可以有效控制对象实例的数量,降低内存占用。 ##### JDBC代码调优 数据库访问是大多数企业级应用中的关键路径,优化JDBC代码可以显著提高数据处理速度。这包括但不限于:...
- **事务与并发控制**:ACID特性,乐观锁与悲观锁,MVCC(多版本并发控制)机制。 - **数据库设计**:范式理论,ER模型到关系模型的转换。 6. **设计模式**: - **常见的23种设计模式**:单例、工厂、建造者、...
关于本站“设计模式” Java 提供了丰富的 API,同时又有强大的数据库系统作底层支持,那么我们的编程似乎变成了类似积木的简单"拼凑"和调用, 甚至有人提倡"蓝领程序员",这些都是对现代编程技术的不了解所至. 在...
### J2EE面试题知识点详解 #### 一、线程相关问题 1. **下列类是否可以被继承?** - `java.lang.Thread`:**可以**被继承。 - `java.lang.Number`:**不可以**被继承。 - `java.lang.Double`:**不可以**被继承...
【J2EE面试题目解析】 在Java企业级开发中,面试常常会涉及到各种技术细节,以下是一些常见的J2EE面试问题及其详细解答: 1. **MVC模式**: MVC(Model-View-Controller)是一种软件设计模式,用于分离应用程序的...
### J2EE软件工程师全部培训课程总结 #### 数据库操作:Oracle - **选择行**:在Oracle数据库中,可以通过`SELECT`语句来选择特定的行。例如,使用`WHERE`子句来限定选择条件。 - **限制选择行**:使用`LIMIT`或`...
### JAVA_J2EE大面试(全)知识点梳理 #### 一、Java异常处理机制 **知识点1:Java异常处理机制** - Java中的异常处理机制主要包括`try`、`catch`、`finally`以及`throw`等关键字。 - `try`块用于包含可能抛出异常...
### J2EE学习笔记及其相关源代码 #### Java 核心技术及框架介绍 本学习笔记主要涵盖了Java的核心技术和相关的框架知识,包括Hibernate、Struts、Spring等热门框架的应用。 ##### JAVA特点 - **简单性**:Java简化...
12. **Java新特性**:随着版本的更新,Java引入了许多新特性,如Lambda表达式、模块系统、并发改进等,文章可能会探讨这些新特性如何提升开发效率和代码质量。 这个合集对Java和J2EE学习者来说是一份宝贵的资源,...
4. J2EE与设计模式:分析设计模式在J2EE架构下的具体应用,以及如何优化企业级应用的性能和可扩展性。 5. 轻量级企业架构:引入Struts、Spring、Hibernate等框架,展示如何构建高性能、可维护的企业级应用。 六、...
9. **Java新特性**:从Java 8到Java 14,每一代版本都有新特性,比如Lambda表达式、流API、接口默认方法、局部变量类型推断等,这些都是面试官可能会询问的内容。 10. **实战经验**:除了理论知识,面试官还会关注...