1.阐述事务管理的步骤
服务器端在接收到用户的请求后,会创建一个新的Hibernate Session对象,然后通过该Session对象开始一个新的事务并且之后所有对数据库的操作都通过该Session对象来进行。最后,完成将响应页面发送到客户端的工作后再提交事务并且关闭Session。
2.解释并发引起的各种问题
1)第一类丢失更新:撤销一个事物时,把其它事物已提交的更新数据也撤销了
2)脏读:一个事务读到另一个事务未提交的更新数据。
3)不可重复读:一个事务读到另一个事务已经提交的更改数据。
4)第二类丢失更新:一个事务覆盖另一个事务已经提交的更新数据。
5)幻读:一个事务读到另一个事务已经提交的新增或以删除数据。
3.编写程序来演示乐观锁的作用
public void testTx1() {
Session session = HibernateSessionFactory.getSession();
Transaction tx = session.beginTransaction();
Student stu = null;
try {
stu = (Student)session.get(Student.class, 1);
System.out.println(stu.getName());
System.out.println("version=" + stu.getVersion());
stu.setName("在第一个事务中修改");
session.getTransaction().commit();
}
catch (HibernateException he) {
tx.rollback();
he.printStackTrace();
}
session.close();
// 操作完毕
System.out.println("tx1操作完成后------");
System.out.println(stu.getName());
System.out.println("version=" + stu.getVersion());
}
4.叙述悲观锁的实现原理及使用步骤
悲观锁是假定当前事务操作数据资源时,一定有其他事务同时访问该数据资源,所以先锁定资源。
一般实现方式是由数据库来实现,采用独占锁来锁定资源。使用get(),load(),是可以显示指定锁定模式:LockMode.UPGRADE
Session.get(Student.class,1,LockMode.UPGRADE);