hibernate当中的事务操作

(1)事务当中的概念


(2)事务的特点(ACID)


(3)事务的并发问题

脏读:一个事务读取到另一个事务为提交的数据

不可重复读:一个事务读取到另一个事务已经提交的update的数据,导致在一个事务中的多次查询的结果不一致

虚读|幻读:一个事务读到了另一个事务已经提交的insert的数据,导致在一个事务中的多次查询结果不一致。

(4)由此提出事务的隔离级别,分为4个,分别为:读未提交,读已提交,可重复读,串行。


(5)如何在hibernate当中设置隔离级别

从project->etc->hibernate.properties找到isolation level,在hibernate.cfg.xml当中修改。

其中有4个级别  1、2、4、8,即为0001、0010、0100、1000,期分别为读未提交,读已提交,重复读,串行化

(6)在项目中如何管理事务?

即在业务开始之前打开事务,在业务执行之后提交事务,执行过程当中出现异常,回滚事务

在dao层操作数据库需要到session对象,在service层控制事务也是用到sesson对象完成,我们要确保dao层和service层使用的应该为同一个session对象。

解决方案:将session绑定到当前的线程上。hibernate框架已经进行了相关操作,我们开发人员只需要调用sessionFactory。getCurrentSession方法即可获得与当前线程绑定的session对象。

注意1.1调用getCurrentSession 时,需要在配置文件当中自己写入,(properties文件当中找不到,需要手写)

<property name="hibernate.current_session_context_class">thread</property>


1.2通过getCurrentSession 方法获得session对象,当事务提交时,session会自动关闭,不要手调用close,否则会抛出异常






猜你喜欢

转载自blog.csdn.net/luoyexiadeguang/article/details/79376444