OpenJWeb代码生成器增加乐观锁的控制

迷途d书童 发布于 2012/03/09 12:17
阅读 140
收藏 0

【Gopher China万字分享】华为云的Go语言云原生实战经验!>>>

 

OpenJWeb代码生成器增加乐观锁的生成

 

项目开发经常遇到这样的问题:

当两个人打开同一条记录的编辑页面,甲改了A字段保存,乙改了B字段保存,在没有并发控制的情况下,乙修改的数据会覆盖甲修改的数据,为了防止这种情况的发生,OpenJWeb代码生成器增加了乐观锁控制。

乐观锁字段采用record_version long型字段,下面以运费毛利设置表为例,目前平台生成的hibernate配置文件包含了乐观锁:

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<!--    Mapping file autogenerated by OpenJWeb - Hibernate Tools

-->

<hibernate-mapping>

    <class name="com.tzsoft.wl.entity.WlTransfeeConfig" table="wl_transfee_config" optimistic-lock="version">

        <id name="pkId" type="java.lang.String">

            <column name="pk_id" length="40" />

            <generator class="assigned" />

        </id>

        <version name="recordVersion" column="record_version" type="java.lang.Long"/>

        <property name="rowId" type="java.lang.String">

            <column name="row_id" length="40" />

        </property>

        <property name="sortNo" type="java.lang.Long">

            <column name="sort_no"   />

        </property>

        <property name="createDt" type="java.lang.String">

            <column name="create_dt" length="23" />

        </property>

        <property name="updateDt" type="java.lang.String">

            <column name="update_dt" length="23" />

        </property>

        <property name="createUid" type="java.lang.String">

            <column name="create_uid" length="32" />

        </property>

        <property name="updateUid" type="java.lang.String">

            <column name="update_uid" length="32" />

        </property>

        <property name="dataFlg" type="java.lang.String">

            <column name="data_flg" length="6" />

        </property>

        <property name="objName" type="java.lang.String">

            <column name="obj_name" length="40" />

        </property>

        <property name="masterRowId" type="java.lang.String">

            <column name="master_row_id" length="40" />

        </property>

        <property name="flowTransId" type="java.lang.String">

            <column name="flow_trans_id" length="40" />

        </property>

        <property name="flowStatus" type="java.lang.String">

            <column name="flow_status" length="16" />

        </property>

        <property name="unitCost1" type="java.lang.Double">

            <column name="unit_cost1" precision="8" />

        </property>

        <property name="vehicleType" type="java.lang.String">

            <column name="vehicle_type" length="40" />

        </property>

        <property name="unitCost2" type="java.lang.Double">

            <column name="unit_cost2" precision="8" />

        </property>

        <!--append new column-->

    </class>

</hibernate-mapping>

 

对应的实体类相应增加了recordVersion的声明和set、get方法:

 

private Long recordVersion;

public Long getRecordVersion() {

        return this.recordVersion;

}

 

public void setRecordVersion(Long recordVersion) {

      this.recordVersion = recordVersion;

}

 

在控制层的保存方法中要增加对并发锁异常的拦截,参考下面的异常拦截代码:

 

       try

       {

           if(this.getEntityClassName().endsWith("Head"))  

           {

              bizService.saveBill(this.getEditEntity(),this.getDetail(), request);

           }

           else

           {

              //logger.info("在控制层开始调用保存...");

              service.saveOrUpdate(this.getEditEntity());

           }

       }

       catch(Exception ex)

       {

          

           if(ex.toString().indexOf("org.springframework.orm.hibernate3.HibernateOptimisticLockingFailureException")>-1)

           {

              this.addActionError("在保存之前数据已经被其他人修改,请重新检索!!");

           }

           else

           {

               ex.printStackTrace();

              this.addActionError("保存异常,异常信息:"+ex.toString());

           }

           return "error";

       }

 

以后新生成的实体类都自动增加乐观锁字段。平台原有实体如果想增加并发控制,可参考上面的说明手工添加。


原文链接:http://blog.csdn.net/baozhengw/article/details/7210335
加载中
返回顶部
顶部