温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Hibernate中怎么实现事务对象

发布时间:2021-08-11 15:32:51 来源:亿速云 阅读:152 作者:Leah 栏目:编程语言

Hibernate中怎么实现事务对象,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

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" />

例:

public class User implements Serializable{       private int id;       private String name;       private String phone;       private int version;//记录版本的属性       public int getId(){           return id;       }         public void setId(int id){           this.id = id;       }         public String getName(){           return name;       }         public void setName(String name){           this.name = name;       }         public String getPhone(){           return phone;       }         public void setPhone(String phone){           this.phone = phone;       }         public int getVersion(){           return version;       }         public void setVersion(int version){           this.version = version;       }             }

User类的User.hbm.xml文件

< hibernate-mapping package="alan.hbn.concur.version" auto-import="false">       < class name="User" table="user_version">           < id name="id" column="id" type="integer" unsaved-value="0">                < generator class="native"/>           < /id>           < version name="version" column="version" type="integer" />           < !--版本控制,指定了版本属性的名字,和对应表中的字段和类型-->           < property name="name" column="name"/>           < property name="phone" column="phone"/>               < /class>  < /hibernate-mapping>

关于Hibernate中怎么实现事务对象问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI