Hibernate学习笔记(九)【高级篇】并发、Session管理
数据库事务级别 以及对应 Hibernate事务码
先查 mysql>select @@tx_isolation
设置 mysql>set global transaction isolation level read committed
注意需要配置需要房子<id>标签后面,加载时版本是0,保存该对象set version =1where version = 0
所以保存时,如果数据库变化了就保存不进,抛异常,需捕获哦。
?
乐观的时间戳
<timestamp name = "lastUpdateTime" column="lastUpdateTime">其他说明和版本控制一样
但是只能精确到秒,所以你懂的
?
乐观锁其他
<class name="Monkey" table="MONKEY" optimistic-lock="dirty" dynamic-update="true">
如你改其中一个叫COUNT的字段,查出来时是100,保存为101时
向数据发 update MONKEY setCOUNT=101 whereCOUNT=100
optimistic-lock dynamic-update 需同时有,且是在一个session内的操作
?
管理Session
session =sessionFactory.getCurrentSession().openSession();session.setFlushMode(FlushMode.MANUAL)//手动提交ManagedSessionContext.bind(session) //需要先为该线程绑定sessionsession.beginTransaction()。。。某某查询//解除与当前线程的绑定ManagedSessionContext.unbind(sessionFactory.getCurrentSession()) //判断与当前线程的绑定情况//ManagedSessionContext.hasbind(sessionFactory.getCurrentSession()) session.transaction().commit();//释放数据库连接,等待用户其他事。。。某某等待时间ManagedSessionContext.bind(session) //需要先为该线程绑定sessionsession.beginTransaction();//重新分配数据连接。。。某某更新ManagedSessionContext.unbind(sessionFactory.getCurrentSession()) sessiom.flush();//手动更新数据session.transaction().commit();?