JPA:java persistence API,是JavaEE规范之一。
我们了解和使用的JavaEE规范有JSP,Servlet,JSTL,JMS,JTA,JPA,EJB等等。
JAP是一个规范,与任何的ORM框架都不冲突,底层可以选择任意的ORM框架。
ORM框架:让程序能用面向对象的方式去操作数据库。各种语言都有自己的ORM框架,。Java的ORM框架是最多的。
无论哪种Java的ORM框架,都会主动遵守JPA规范。
使用JPA进行数据持久化的操作
管理数据库连接的配置文件,不能用ORM框架本身提供的,如hibernate.cfg.xml,而是使用JPA规范定义的配置文件。该配置文件必须放在META-INF目录下,文件名必须是persistence.xml
程序中应该使用persistence,EntityManagerFactory,EntityManager,EntityTransaction等JPA的API。
需要导入JPA的jar包,位于hibernate/lib/jpa下。
数据库事务
Hibernate是JDBC的轻量级封装,本身不具备管理事务的能力。
在事务管理层,hibernate将其委托给底层的jdbc或JTA以实现事务的管理和调度。
数据库事务特性
事务是访问并可能操作各种数据项的一个数据库操作的序列。具有以下的特性:
原子性
一致性
隔离性
持久性
数据库采用日志来保证事务的原子性,一致性和持久性,采用锁机制来实现事务的隔离性。
数据库事务并发引发的问题
事务的隔离性不完全,就会导致各种并发问题,这些问题主要归纳为以下几类:
更新丢失(lost update)
脏读(dirty read)
不可重复读(non-repeatableread)
幻读(phantom read)
事务的隔离级别
为了避免并发问题的出现,一保证数据的完整性和一致性,必须实现事务的隔离性。
ANSI/IOS SQL92标准定义了一些数据库操作的隔离级别:
序列化级别
可重复读
读已提交
读未提交
隔离级别及其对应的可能出现或不可能出现的现象如下表
Hibrenate中的事务
对于不同的DBMS,具体应用的隔离级别可能不同。
可以在hibernate.properties或hibernate.cfg.xml文件中配置事务的隔离级别,在hibernate.propertiesp配置如下:
Hibernate.connection.isolation=4
1:读未提交
2:读已提交
4:可重复提交
8:序列化