休眠:删除集合中元素的最佳方式
我经常在Hibernate上遇到的一个问题是,有一个列表(称为listA)的对象,我想对实体(我的实体)持久化,但必须首先将它们与实体上的现有列表进行比较,并删除那些不在listA中的对象。
执行此操作的简单方法是清除实体上的列表,然后将所有listA添加到实体中,但是我经常必须在删除元素之前对元素执行一些验证 - 例如。以检查是否允许此用户删除它们。
我现在的方法感觉很尴尬:
//Delete the elements that have been removed
//Use toArray to avoid ConcurrentModificationException
for(ObjectA a : myEntity.getObjectAList().toArray(new ObjectA[myEntity.getObjectAList().size()])) {
if(!listA.contains(a)) {
//Check if this element can be deleted
if(canDelete(a)) {
entityManager.remove(a);
myEntity.getObjectAList().remove(a);
}
}
}
//Add the elements that don't already exist
for(ObjectA a : listA) {
if(!myEntity.getObjectAList().contains(a)) {
myEntity.getObjectAList().add(a);
}
}
还有改进的余地吗?
谢谢。