JDBC事务操作
事务(ACID)
原子性(atomicity):组成事务处理的语句形成一个逻辑单元,不能只执行其中的一部分
一致性(consistency):在事务处理执行前后,数据库是一致的(数据库数据完整性约束)
隔离性(isolcation):一个事务处理对另一个事务处理的影响
持续性(durability):事务处理的效果能够被永久的保存下来
Connection.setAutoCommit(true/false) 设置事务是否自动提交(jdbc默认提交事务)
Connection.commit() 提交事务
Connection.rollback() 回滚事务
JTA:跨数据库访问资源,分成两个阶段提交事务。 JTA容器
隔离级别:
可串行化:(Serializable)最安全,但是效率最低。
可重复读:(Repeatable read)有幻读可能(推荐)
读已提交:(Read committed)有不可重复读、幻读(推荐)
读未提交(Read uncommitted)脏读、不可重复读、幻读。安全性最差,效率最高。
锁(悲观锁、乐观锁)
锁机制主要是为了解决并发性问题的。
悲观锁:悲观锁,通常是由数据库机制实现的,在整个过程中把数据锁住(查询时),只要事务不释放(提交/回滚)那么任何用户都不能查看或修改。
乐观锁:大多数的使用是采用数据版本的方式(version)实现,一般在数据库中加入一个version字段在读取数据的时候将version读取出来,在保存数据的时候判断version的值是否小于数据库中的version值,如果小于不予更新,否则给予更新。
Hibernate对悲观锁和乐观锁都提供了支持
悲观锁:LockMode.UPGRADE(在load或get 获得对象的时候设置该属性)
乐观锁:需要使用到version字段和配置(在对象中就要声明该version字段)