你要锁定一行可以使用悲观锁,即查询的时候使用 select ... for update,在一个事务中进行操作即可。也可以使用乐观锁,即需要个版本字段,更新一次就加一,每次更新之前做对比,即可解决。
解决方案 »
- tomcat5.5怎么解决Java heap space异常呢?
- spring命名空间p
- jfreechart 画多个个y轴的曲线图
- Weblogic 如果 ShutDown了,如何让它自动Start
- 对访问者模式(Visitor)的疑问?
- 初学servlet,空指针异常,请大家帮忙看看是什么问题?
- struts2和javabean的set/get方法命名规范不一致吗?
- 哪位大虾对移动代理的Aglet平台有研究啊
- 字符集和编码是什么关系?
- 不知这个问题该不该在这里问。
- 为什么servlet从另一个网页取过来的字符串是乱码。请前辈帮我看看代码。谢谢
- 如何解决通过WebService将服务端的自定义异常传递到客户端?
我本来也是想用悲观锁, 使用ISession的方法Lock
ISession session;
session.Lock(obj, LockMode.Upgrade)
本进程内, 再获取改对象的锁定状态session.GetCurrentLockMode(obj); 确实是LockMode.Upgrade.
但是另一个进程, 就一直是LockMode.NONE看文档, 这个锁好像是数据库的,通过for update实现, 但为什么对其他进程无效呢?
可能是其他的进程并没有访问 你 for update 的那条记录 。 就不会被锁上。