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

在项目开发中,OpenJWeb代码生成器通过增加乐观锁功能来解决多人同时编辑同一记录时的数据冲突问题。该功能通过记录版本号(record_version)来判断数据是否被他人修改,从而在保存数据时避免数据覆盖。同时提供了异常拦截机制,当检测到数据已被他人修改时,提示用户重新检索。此更新适用于新生成的实体类,并允许原有实体手动添加并发控制。

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";

}

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值