hibernate _事务相关知识点隔离级别设置与项目中的事务管理
一、什么是事务
1、Hlbernate是对JDBC的轻量级封装,其主要功能是操作数据库。在操作数据库过程中,经常会遇到事务处理的问题,那么我们接下来就来介绍Hibernate中的事务管理
2、在数据库操作中,一项事务(Transactlon)是由一条或多条操作数据库的SQL语句组成的一个不可分割的工作单元。当事务中的所有操作都正常完成时,整个事务才能被提交到数据库中,如果有一项操作没有完成,则整个事务会被回滚
二、事务特性
1、原子性(Atomic):
1、表示将事务中所做的操作捆绑成一个不可分割的单元,即对事务所进行的数据修改等操作,要么全部执行,要么全都不执行
2、一致性(Consistency):
2、表示事务完成时,必须使所有的数据都保持一致状态
3、隔离性(Isolatlon):
3、指一个事务的执行不能被其它事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰
4、持久性(Durablllty):
4、持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。提交后的其他操作或故障不会对其有任何影响
三、事务并发
1、脏读:
1、一个事务读取到另一个事务未提交的数据
2、不可重复度:
1、一个事务读到了另一个事务己经提交的update的数据,导致在同一个事务中的多次查询结果不一致
3、幻|虚读:
1、一个事务读到了另一个事务己经提交的Insert的数据,导致在同一个事务中的多次查询结果不一致
四、事务的隔离级别
1、读未提交-(可脏读/不可重复度/幻|虚读)
2、读已提交 -(可不可重复度/幻|虚读)
3、可重复读(mysql默认级别)--(可幻|虚读)
4、串行化 - 没有问题
五、hibernate中指定数据库的隔离级别
1、在默认的配文件中查询
六、管理事务
1、业务开始之前打开事务,业务执行之后提交事务. 执行过程中出现异常.回滚事务.
2、在dao层操作数据库需要用到session对象.在service控制事务也是使用session对象完成. 我们要确保dao层和service层使用的使用同一个session对象
3、在hibernate中,确保使用同一个session的问题,hibernate已经帮我们解决了. 我们开发人员只需要调用sf.getCurrentSession()方法即可获得与当前线程绑定的session对象
1、调用sf.getCurrentSession()方法
1、注意: 调用getCurrentSession方法必须配合主配置中的一段配置
2、这个在hibernate.properties是找不到,必须记住
3、注意:通过getCurrentSession方法获得的session对象.当事务提交时,session会自动关闭.不要手动调用close关闭.
4、测试