<b>hibernate3学习笔记(二十三)|进阶特点(一)</b>[Java编程]
本文“<b>hibernate3学习笔记(二十三)|进阶特点(一)</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
1.悲观锁定:
在多个客户端大概读取同一笔数据或同时更新一笔数据的情形下,必必要有拜候掌握的手段,避免同一个数据被改正而造成混乱,最简单的手段就是对资料举行锁定,在自己举行资料读取或更新等行动时,锁定其他客户端不能对同一笔资料举行任何的行动.
悲观锁定(Pessimistic Locking)一如其名称所示,悲观的认定每次资料存取时,别的的客户端也会存取同一笔资料,因此对该笔资料举行锁定,直到自己操作完成後解除锁定.
悲观锁定普通透过系统或资料库本身的功效来实现,依靠系统或资料库本身供应的锁定机制,Hibernate便是如此,可以操纵Query或Criteria的setLockMode()办法来设定要锁定的表或列(Row)及其锁定情势,可设定的锁定情势有以下的几个:
LockMode.UPGRADE:操纵资料库的for update子句举行锁定.
LockMode.UPGRADE_NOWAIT:利用for update nowait子句举行锁定,在Oracle资料库中利用.
一个设定锁定的例子以下:
Session session = sessionFactory.openSession();
Query query = session.createQuery("from User user");
query.setLockMode("user", LockMode.UPGRADE);
List users = query.list();
...
session.close();这个程式片段会利用以下的SQL举行查询:
Hibernate: select user0_.id as id, user0_.name as name0_, user0_.age as age0_
from user user0_ for update也可以在利用Session的load()或是lock()时指定锁定情势以举行锁定.
别的还有三种加锁情势Hibernate内部自动对资料举行锁定,与资料库无关:
LockMode.WRITE:在insert或update时举行锁定,Hibernate会在save()办法时自动得到锁定.
LockMode.READ:在读取记录时Hibernate会自动得到锁定.
LockMode.NONE:没有锁定.
假如资料库不援助所指定的锁定情势,Hibernate会挑选一个符合的锁定替换,而不是丢出一个例外.
以上是“<b>hibernate3学习笔记(二十三)|进阶特点(一)</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |