JPA事务简介

来源:互联网 发布:淘宝卖家全网举报在哪 编辑:程序博客网 时间:2024/06/06 23:27

1.事务

是指访问并可能更新数据库中各种数据项的一个程序执行单元。事务管理是对一系列操作的管理,它最终只要两个结果,要么成功,要么失败。一旦失败,所有的操作将回滚到初始状态;成功才最终提交,最终持久化。

2.事务的特性ACID

原子性、一致性、隔离性、持久性

原子性(atomicity)。一个事务是一个不可分割的工作单位,要么都做,要么都不做。

一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。

隔离性(isolation)。一个事务的执行不能被其他事务干扰。即并发执行的各个事务之间不能互相干扰。

持久性(durability)。指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。

3.JPA中的事务

JPA中的事务管理有两种方式,分别是JTARESOURCE_LOCAL。他的事务类型是通过persistence.xml文件中的“transaction-type”元素来配置的。

<persistence>

 

    <persistence-unit name="demo"transaction-type="JTA">

 

        //其他配置。。。。。。

 

    </persistence-unit>

 

</persistence>

 

<persistence>

 

    <persistence-unit name="demo"transaction-type="RESOURCE_LOCAL">

 

        //其他配置。。。。。。

 

    </persistence-unit>

 

</persistence>

1JTA事务

JTA事务(Java TransactionAPI)是J2EE规范中有关事务的标准。它是容器级别的事务,只能运行在J2EE服务器中。它的最大优势是可以支持分布式的事务,如果系统采用的是分布式的数据库,那么只能选择JTA管理EntityManager事务。注意:

JTA事务只能运行在J2EE的环境中,即EJB容器中和Web容器中;而在J2SE环境中只能使用RESOURCE_LOCAL管理事务。

容器托管的EntityManager对象只能采用JTA的事务,而不能采用RESOURCE_LOCAL事务。

 

2)RESOURCE_LOCAL事务

RESOURCE_LOCAL事务是本地的事务。它是数据库级别的事务,只能针对一种数据库,不支持分布式的事务。对于中小型的应用,可以采用RESOURCE_LOCAL管理 EntityManager事务。注意:

J2SE环境中,只能使用RESOURCE_LOCAL管理EntityManager事务,并且EntityManager对象是以应用托管方式获得的。

代码中使用RESOURCE_LOCAL管理事务时要通过调用EntityManager的getTransac-tion()方法获得本地事务对象。

4.总结

如果要使用分布式事务就只能选择JTA,RESOURCE_LOCAL事务不支持分布式事务,且得自己手动管理事务,每次操作都得手动开启事务——getTransaction().begin()和关闭事务——getTransaction().commit()。

0 0
原创粉丝点击