Hibernate的事务:事务对象的方法

开发 后端
Hibernate的事务保证原子操作的不可分,也就是操作的同时成功或同时失败。hibernate的事务隔离级别和JDBC中大致相同。

Hibernate在发送Sql把对象信息同步到数据时,不是立即进行的而是把这些要发送的Sql缓存在起来,在必要的时候发送。

通过Session的setFlushMode(FlushMode flushMode)方法,来控制在什么时候清空Sql的缓冲区,并把缓存的Sql语句发送出去。

FlushMode是一个枚举,它有3个枚举值。

FlushMode.AUTO,在持久化对象的信息被修改时,那么就要把它同步到数据库中,更新数据库中队应的记录,也就是在产生修改时就会清空缓冲区。

FlushMode.COMMIT,只有在事务提交的时候才清空缓冲区。

FlushMode.NEVER,这个值表示只有在调用了Session的flush()方法才清空缓冲区。

Hibernate的事务保证原子操作的不可分,也就是操作的同时成功或同时失败。

Transaction tran=session.beginTranaction();

tran.commit();

tran.rollback();

以上是Hibernate的事务对象的方法,来实现对事务的支持。

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的锁(悲观锁,乐观锁)

悲观锁是由数据库本身所实现的,会对数据库中的数据进行锁定,也就是锁行。

LockMode.UPGRADE,修改锁,在get()方法中加上这个设置作为第三个参数。

LockMode.NONE 无锁机制

LockMode.READ 读取锁

LockMode.WRITE 写入锁,不能在程序中直接使用

还可以使用Session.lock() Query.setLockMode() Criteria.setLockMode()方法来设置锁

乐观锁,也就是通过对记录加上某些信息来解决并发访问的问题。

版本检查

要在其表中多加上一个字段表示版本信息,会在读取时读到这个版本号,并在修改之后更新这个版本号,在并发修改的时,只有数据库中记录的版本号比要更新的才进行更新操作,如果数据库记录版本号比要更新的高,就会抛出例外。

写在Xxxxx.hbm.xml中

< version name="version" column="version" type="integer" />

例:

  1. public class User implements Serializable{  
  2.  
  3.     private int id;  
  4.  
  5.     private String name;  
  6.  
  7.     private String phone;  
  8.  
  9.     private int version;//记录版本的属性  
  10.  
  11.     public int getId(){  
  12.  
  13.         return id;  
  14.  
  15.     }  
  16.  
  17.  
  18.  
  19.     public void setId(int id){  
  20.  
  21.         this.id = id;  
  22.  
  23.     }  
  24.  
  25.  
  26.  
  27.     public String getName(){  
  28.  
  29.         return name;  
  30.  
  31.     }  
  32.  
  33.  
  34.  
  35.     public void setName(String name){  
  36.  
  37.         this.name = name;  
  38.  
  39.     }  
  40.  
  41.  
  42.  
  43.     public String getPhone(){  
  44.  
  45.         return phone;  
  46.  
  47.     }  
  48.  
  49.  
  50.  
  51.     public void setPhone(String phone){  
  52.  
  53.         this.phone = phone;  
  54.  
  55.     }  
  56.  
  57.  
  58.  
  59.     public int getVersion(){  
  60.  
  61.         return version;  
  62.  
  63.     }  
  64.  
  65.  
  66.  
  67.     public void setVersion(int version){  
  68.  
  69.         this.version = version;  
  70.  
  71.     }     
  72.  
  73.       
  74.  
  75. }  

User类的User.hbm.xml文件

  1. < hibernate-mapping package="alan.hbn.concur.version" auto-import="false"> 
  2.  
  3.      < class name="User" table="user_version"> 
  4.  
  5.          < id name="id" column="id" type="integer" unsaved-value="0"> 
  6.  
  7.               < generator class="native"/> 
  8.  
  9.          < /id> 
  10.  
  11.          < version name="version" column="version" type="integer" /> 
  12.  
  13.          < !--版本控制,指定了版本属性的名字,和对应表中的字段和类型--> 
  14.  
  15.          < property name="name" column="name"/> 
  16.  
  17.          < property name="phone" column="phone"/>          
  18.  
  19.     < /class> 
  20.  
  21. < /hibernate-mapping> 

【编辑推荐】

  1. Hibernate缓存简介及分类
  2. Hibernate中generator属性的意义
  3. hibernate Key Generator 主键生成方式
  4. Hibernate的主键生成机制
  5. hibernate的Query cache 
     
责任编辑:book05 来源: 163博客
相关推荐

2009-09-23 17:41:05

Hibernate事务

2009-06-03 10:49:48

Hibernate事务

2009-06-03 10:20:11

Hibernate事务管理配置

2009-09-25 11:27:19

Hibernate J

2009-09-25 12:59:53

Hibernate事务

2009-09-24 14:12:22

Hibernate数据

2017-01-19 15:32:36

Java全局事务本地事务

2012-02-02 15:57:09

HibernateJava

2009-09-23 17:48:00

Hibernate事务

2009-09-29 09:44:52

Hibernate事务

2009-06-26 16:31:50

区分不同对象Hibernate

2011-03-25 10:00:23

Spring3.0事务的配置

2009-06-12 09:49:25

EJB事务属性EJB事物

2010-11-22 16:40:00

MySQL事务表

2009-07-23 13:30:46

JDBC事务

2020-07-17 08:07:54

Spring数据库事务

2010-10-11 09:25:06

定义MySQL事务

2009-07-08 14:01:47

Servlet容器

2022-04-26 21:49:55

Spring事务数据库

2024-01-18 11:54:44

Redis事务命令
点赞
收藏

51CTO技术栈公众号