Hibernate支持两种锁机制:
悲观锁(Pessimistic Locking):当数据被外界修改时保持原始状态,因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁大多数情况下依靠数据库的锁机制实现。
乐观锁(Optimistic Locking):主要由Hibernate提供的版本控制功能实现。
Hibernate的主要锁定模式:
(1) LockMode.NONE:无锁机制,这是默认的锁定模式。
(2) LockMode.WRITE:在Insert和Update记录时会自动使用此模式。
(3) LockMode.READ:在读取记录时会自动使用此模式。
(4) LockMode.UPGRADE:利用数据库的for update子句加锁。
(5) LockMode.UPGRADE_NOWAIT:Oracle的特定实现,利用Oracle的for update nowait子句实现加锁功能。
在Hibernate中显式的指定锁定模式可以通过以下几种方式之一来表示:
(1) 调用Session.load()时指定锁定模式(LockMode)。
session=HibernateSessionFactory.getSession();
Student stu=(Student)session.load(Student.class, 10,LockMode.NONE);
(2) 调用Session.lock()。
session=HibernateSessionFactory.getSession();
Student stu=(Student)session.load(Student.class, 10);
session.lock(stu, LockMode.READ);
(3) 调用Query.setLockMode()。
session=HibernateSessionFactory.getSession();
Query query=session.createQuery("from Student");
query.setLockMode("student", LockMode.NONE);