首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

hibernate 并发有关问题

2012-04-10 
hibernate 并发问题public String quit(GameUser gameUser) {String message ArmyGroup ag gameUse

hibernate 并发问题
public String quit(GameUser gameUser) {
String message = "";

ArmyGroup ag = gameUser.getArmyGroup();

session.lock(gameUser, LockMode.UPGRADE);
gameUser.setArmyGroup(null); // 更新个人
commonManager.update(gameUser);

return message;
}
请教一下如3个下问题:
1.这段代码中用到的悲观锁, 会不会产生脏数据呢?
因为传过来的 gameUser可以是很早以前就读取的, 到这里才 lock 可能就已经不是最新数据。
2. 如果再这里重新 session.load( , ,LockMode) 这样的话就多查询了一次,但是应该可以相对避免并发问题。
3. 如果一条数据 load出来, 再用 lock 锁住, 这样不是在数据库执行了两次, 性能是不是很不好呢。

如何解决这些问题呢?请大家帮帮忙解答一下, 不胜感激!

[解决办法]
1、这段代码中用到的悲观锁, 会不会产生脏数据呢?
—— 有可能,如你所分析;

2、 如果再这里重新 session.load( , ,LockMode) 这样的话就多查询了一次,但是应该可以相对避免并发问题。
——可以,但其实仍存在问题,就是此时你重新读取的话,这个gameUser跟之前的不一样你该怎么办?

3. 如果一条数据 load出来, 再用 lock 锁住, 这样不是在数据库执行了两次, 性能是不是很不好呢。
——可以在第一次load的同时就lock住,只执行一次,类似于:
Select * From TABLE Where .... For Update

热点排行