类似买票问题。
需要先查出一条数据,再更新其中的字段标识不被查出。并发情况下如何保证这条数据不被多处更新。
在nutz的service中怎么处理比较好?
10 回复
select id,used from room where used="No"
* id=123,used="N"
update room set used ="Yes" where id =123
我的场景大概是这样的。担心并发情况下123被多处查出,更新的时候就混乱了
加版本号的话,伪代码应该是这样的吧?
select id,used,version from room where used="No"
* id=123,used="No",version=0
update room set used ="Yes",version=1 where id =123 and version=0
这样?
room = fetch(cnd);
room.setUsed("Yes");
room.setVersion(room.getVersion+1);
dao().updateWithVersion(obj);
需要过滤的字段什么意思?
/**
* 基于版本的更新,版本不一样无法更新到数据
* @param obj 需要更新的对象, 必须有version属性
* @return 若更新成功,大于0, 否则小于0
*/
int updateWithVersion(Object obj);
/**
* 基于版本的更新,版本不一样无法更新到数据
* @param obj 需要更新的对象, 必须有version属性
* @param fieldFilter 需要过滤的字段设置
* @return 若更新成功,大于0, 否则小于0
*/
int updateWithVersion(Object obj, FieldFilter fieldFilter);
添加回复
请先登陆