为以下两个问题提供解决:
1. Hibernate cascade="all-delete-orphan"应用;
2. 用Collection or List 等集合时,迭代remove操作引起的java.util.ConcurrentModificationException问题
/** 修改業務系統 */
public String updateBuinessSys() {
modify = true;
String transId = (String) getRequestMap().get("transId");
if (StringUtil.isNullOrBlank(transId)) {
context.addMessage(null, new FacesMessage("不能獲取業務系統對象"));
return null;
}
Transaction transaction = transactionsManager.getTransactionById(transId);
if (transaction != null) {
transaction.setTransName(transName);
transaction.setTransCode(transCode);
transaction.setTransDesc(transDesc);
transaction.setEnterpriseCodes(enterpriseCodes);
transaction.setBankCodes(bankCodes);
String transFuncXml = context.getExternalContext().getRequestParameterMap().get("transFuncXml");
assembleTransFuncs(transFuncXml);
Set<String> newFunIdSet = new HashSet<String>();//新增的列表id set
Set<String> dbFunIdSet = new HashSet<String>();//DB中的列表id set
List<TransFunction> funList = transaction.getTransFunctions();
for (Iterator iterator = funList.iterator(); iterator.hasNext();) {
TransFunction fun = (TransFunction) iterator.next();
dbFunIdSet.add(fun.getId());
}
for (Iterator iterator = transFunList.iterator(); iterator.hasNext();) {
TransFunction fun = (TransFunction) iterator.next();
if (StringUtil.isNotNullOrBlank(fun.getId())) {
newFunIdSet.add(fun.getId());
}
}
/* 先remove,後add則不需要判斷fun.id為null的情況 */
for (Iterator iterator = funList.iterator(); iterator.hasNext();) {
TransFunction fun = (TransFunction) iterator.next();
if (!newFunIdSet.contains(fun.getId()))//如果保存的list中的ID在DB中不存在了,即已經被刪除了,則remove from list,使之成為orphan
//funList.remove(fun); 這一句會引起java.util.ConcurrentModificationException
iterator.remove();
}
for (Iterator iterator = transFunList.iterator(); iterator.hasNext();) {
TransFunction fun = (TransFunction) iterator.next();
if (StringUtil.isNullOrBlank(fun.getId()) || !dbFunIdSet.contains(fun.getId()))
funList.add(fun);//新增的記錄在DB中沒有,則認為是新增的記錄,加入到list當中去
}
//transaction.setTransFunctions(transFunList); 不需要重新設置,設定了all-delete-orphan即可
transactionsManager.saveOrUpdate(transaction);
return "viewBusinessState";
}
context.addMessage(null, new FacesMessage("無效的表單參數"));
return Constants.ERROR;
}
Transaction - TransFunction是一对多的关系: hbm.xml配置档如下:
<?xml version="1.0" encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.test.domain">
<class name="Transaction" table="SYS_TRANS">
<id name="id" column="ID" length="32" type="string">
<generator class="uuid" />
</id>
<property name="transName" column="NAME" length="30" />
<property name="transCode" column="CODE" length="10" unique="true" />
<property name="transDesc" column="DESCR" length="200" />
<property name="enterpriseCodes" column="ENTP_CODES" length="1000" />
<property name="bankCodes" column="BANK_CODES" length="1000" />
<bag name="transFunctions" cascade="all-delete-orphan" inverse="false" lazy="false">
<key column="TRANS_ID" />
<one-to-many class="TransFunction" />
</bag>
</class>
</hibernate-mapping>
<?xml version="1.0" encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.test.domain">
<class name="TransFunction" table="SYS_TRANS_FUNC">
<id name="id" column="ID" length="32" type="string">
<generator class="uuid" />
</id>
<property name="funcName" column="NAME" length="30" />
<property name="funcCode" column="CODE" length="20" unique="true" />
<many-to-one name="transaction" column="TRANS_ID"/>
</class>
</hibernate-mapping>
分享到:
相关推荐
标题中的“PyPI 官网下载 | django-postgres-delete-cascade-2.0a1.tar.gz”表明这是一个从Python Package Index(PyPI)官方源获取的软件包,名为“django-postgres-delete-cascade”。这个软件包的版本是2.0a1,...
3. **all-delete-orphan**: 这是最强大的cascade选项之一,它结合了`save-update`和`delete`的特点,并增加了一个额外的功能——当子实体与父实体之间的关联被解除时,会自动删除那些不再属于任何父实体的子实体。...
标题中的"haarcascade-licence-plate-rus-16stages.xml.zip"是指一个用于识别俄罗斯车牌的OpenCV Haar级联分类器文件的压缩包。OpenCV(开源计算机视觉库)是一个强大的图像处理和计算机视觉库,广泛应用于图像识别...
OpenCASCADE,全称为Open CASCADE Technology,是一个开源的三维几何建模和可视化软件开发工具包,广泛应用于CAD(计算机辅助设计)、CAE(计算机辅助工程)和 CAM(计算机辅助制造)领域。这个压缩包"opencascade-...
标题 "haarcascade-frontalface-alt2.xml.zip" 指示我们正在处理一个与人脸识别相关的资源包。这个压缩文件包含的是OpenCV库中的一个人脸检测算法,具体来说是"haarcascade_frontalface_alt2.xml",这是一种基于特征...
Open CASCADE Technology(简称Open CASCADE,OCCT)是一个开源的3D建模和CAD/CAM/CAE软件开发平台。这个“opencascade-7.3.0-vc14-64.rar”压缩包包含了OCCT 7.3.0版本的安装程序,特别为使用Visual C++ 2017 64位...
$ kubectl delete (-f FILENAME | TYPE NAME) [--grace-period=GRACE_PERIOD] [--orphan] [--cascade=false] [--dry-run=bool] ... ``` #### 二十、kubectl edit 编辑服务器上的资源对象。 ##### 20.1 语法: ```...
标题 "haarcascade-russian-plate-number.xml.zip" 指的是一个OpenCV库中的预训练分类器模型,专门用于检测俄罗斯车辆的车牌号码。这个压缩包包含了一个名为 "haarcascade_russian_plate_number.xml" 的文件,这是一...
"haarcascade-licence-plate-rus-16stages.xml" 文件就是这样的一个预训练分类器,专用于识别俄罗斯车牌。 Haar级联分类器是OpenCV中一种基于特征的检测方法,最初由Piotr Viola和John Jones提出。这个XML文件实际...
标题 "haarcascade-lefteye-2splits.xml.zip" 提供了我们即将讨论的核心主题:OpenCV中的级联分类器,特别是用于检测左眼的Haar特征级联分类器。这个XML文件是OpenCV库的一部分,用于实现计算机视觉中的对象检测功能...
标题 "haarcascade-frontalface-alt-tree.xml.zip" 指的是一个OpenCV库中用于面部检测的预训练模型文件的压缩包。OpenCV(开源计算机视觉库)是一个跨平台的计算机视觉和机器学习软件库,它包含了各种用于处理图像和...
标题中的"haarcascade-righteye-2splits.xml.zip"提到了OpenCV中的一种特征检测算法,即Haar级联分类器。这是一个用于对象检测,尤其是人脸识别中的机器学习模型。Haar级联分类器通过一系列的矩形特征来检测目标,如...
stable-cascade 使用教程安装使用教程.md stable-cascade 使用教程安装使用教程.md stable-cascade 使用教程安装使用教程.md stable-cascade 使用教程安装使用教程.md stable-cascade 使用教程安装使用教程.md ...
标题中的"haarcascade-frontalface-alt.xml.zip"是一个压缩包文件,其中包含了OpenCV库的一个面部检测模型。OpenCV(开源计算机视觉库)是一个强大的工具,广泛应用于图像处理和计算机视觉领域。这个模型,"haar...
在本文中,我们将深入探讨libemgucv的核心功能、安装过程以及如何在C#环境中进行实际应用。 首先,libemgucv的核心功能包括但不限于人脸检测、特征提取、图像处理和分析等。它利用OpenCV的强大功能,如Haar级联分类...
标题 "haarcascade-eye-tree-eyeglasses.xml.zip" 提供了一个关键线索,这与计算机视觉领域中的对象检测算法有关,特别是OpenCV库中的Haar级联分类器。Haar特征是用于人脸检测和其他特征检测的一种算法,由Piotr ...
Ajax-Cascade-Ajax-Select.zip,这是一个现成的html/jquery源代码,演示了如何构建基于ajax的级联选择。,ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和javascript。它用于创建...
标题 "haarcascade-frontalface-default.xml.zip" 暗示了这是一个与计算机视觉和人脸识别相关的资源包。这个压缩文件包含了一个名为 "haarcascade_frontalface_default.xml" 的文件,这是OpenCV库中用于人脸检测的...
标题中的"haarcascade-frontalcatface-extended.xml.zip"是一个OpenCV库中使用的特征级联分类器的压缩文件,专门用于检测猫的正面面部。OpenCV是一个开源计算机视觉库,它包含了大量的图像处理和计算机视觉算法,...
haarcascade_eye_tree_eyeglasses.xml OpenVC haarcascade_frontalcatface.xml haarcascade_frontalcatface_extended.xml haarcascade_frontalface_alt.xml haarcascade_frontalface_alt_tree.xml haarcascade_...