jfinal 乐观锁

canca canca
2016-07-21 20:16
3
0

/**   * 重写save方法   */  public boolean save() {   this.set(getTable().getPrimaryKey(), ToolUtils.getUuidByJdk(true)); // 设置主键值   if(getTable().hasColumnLabel("version")){ // 是否需要乐观锁控制    this.set("version"Long.valueOf(0)); // 初始化乐观锁版本号   }   return super.save();  }
/**   * 重写update方法   */  @SuppressWarnings("unchecked")  public boolean update() {   Table table = getTable();   String name = table.getName();   String pk = table.getPrimaryKey();      // 1.数据是否还存在   String sql = new StringBuffer("select version from ").append(name).append(" where ").append(pk).append(" = ? ").toString();   Model<M> modelOld = findFirst(sql , getStr("ids"));   if(null == modelOld){ // 数据已经被删除    throw new RuntimeException("数据库中此数据不存在,可能数据已经被删除,请刷新数据后在操作");   }      // 2.乐观锁控制   Set<String> modifyFlag = null;   try {    Field field = this.getClass().getSuperclass().getSuperclass().getDeclaredField("modifyFlag");    field.setAccessible(true);    Object object = field.get(this);    if(null != object){     modifyFlag = (Set<String>) object;    }    field.setAccessible(false);   } catch (NoSuchFieldException | SecurityException e) {    log.error("业务Model类必须继承BaseModel");    e.printStackTrace();    throw new RuntimeException("业务Model类必须继承BaseModel");   } catch (IllegalArgumentException | IllegalAccessException e) {    log.error("BaseModel访问modifyFlag异常");    e.printStackTrace();    throw new RuntimeException("BaseModel访问modifyFlag异常");   }   boolean versionModify = modifyFlag.contains("version");   if(versionModify && getTable().hasColumnLabel("version")){ // 是否需要乐观锁控制    Long versionDB = modelOld.getLong("version"); // 数据库中的版本号    Long versionForm = getLong("version"); // 表单中的版本号    if(!(versionForm > versionDB)){     throw new RuntimeException("表单数据版本号和数据库数据版本号不一致,可能数据已经被其他人修改,请重新编辑");    }   }      return super.update();  }
/**   * 获取表映射对象   *    * @return   */  public Table getTable() {   return TableMapping.me().getTable(getClass());  }

<input type="hidden" name="version" value="${version + 1}">


发表评论