Hibernate控制的事务
事务保证原子操作的不可分,也就是操作的同时成功或同时失败。
hibernate的事务隔离级别和JDBC中大致相同。
设置时要在hibernate.cfg.xml配置
<property name="hibernate.connection.isolation">4</property>
1: 读未提交的数据(Read uncommitted isolation) 脏读
2: 读已提交的数据(Read committed isolation) 不可重复读
4: 可重复读级别(Repeatable read isolation) 幻读
8: 可串行化级别(Serializable isolation)
hibernate的锁(悲观锁,乐观锁)
1.悲观锁是由数据库本身所实现的,会对数据库中的数据进行锁定,也就是锁行。(更新期间不许其他人更改)
LockMode.UPGRADE,修改锁,在get()方法中加上这个设置作为第三个参数。
LockMode.NONE 无锁机制
LockMode.READ 读取锁
LockMode.WRITE 写入锁,不能在程序中直接使用
还可以使用Session.lock() Query.setLockMode() Criteria.setLockMode()方法来设置锁,
检测版本号,一旦版本号被改动则报异常。
2.乐观锁,也就是通过对记录加上某些信息来解决并发访问的问题。(认为更新期间不会有其他更改)
版本检查;要在其表中多加上一列表示版本信息,会在读取时读到这个版本号,并在修改之后更新这个版本号;
更新瞬间加锁,并且只有版本号相同才会予以更新,如果版本号不同,就会抛出例外。
<version name="version" column="version" type="integer" />