【问题标题】:How to delete all "one-to-many" items in a ColdFusion orm entity?如何删除 ColdFusion orm 实体中的所有“一对多”项目?
【发布时间】:2011-06-06 04:58:43
【问题描述】:
var items = job.getItems();
for (var item in items)
    job.removeItem(item);

而 CF / Java 抛出

java.util.ConcurrentModificationException 在 java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)

在没有ConcurrentModificationException 的情况下删除所有项目的最干净的方法是什么?

谢谢!

【问题讨论】:

  • 使用 for 或 while 循环通过数组索引访问它们,或者如果不可能,将它们复制到临时列表中,然后遍历该列表。我不知道java(因此工作等),但我知道枚举是如何工作的:)
  • 哦,仅供参考,工作只是一个 CF 组件 Job.cfc,persistent=true,不是 Java 中的东西。
  • 是的,因此您接受彼得的回答是正确的。但是,您遇到的错误与从您当前正在迭代的集合中删除有关,这在 Java 中是一个更普遍的问题。他似乎说clear 方法并不总是可用的。如果您在其他情况下看到这一点,并且没有 clear 方法,请尝试我提到的解决方法之一。干杯:)

标签: orm coldfusion coldfusion-9


【解决方案1】:

在 job.cfc 中,必须实现一个清除项目的方法。

boolean function emptyItems()
{
    return arrayClear(variables.items);
}

然后……

job.emptyItems();

ColdFusion 的 arrayClear() 会在下面的 Java 中调用 clear()

这是唯一的方法,因为 ColdFusion 中的 Array 是按值传递。因此,在 getItems() 之后清除它对job.items 没有任何作用。傻我。

【讨论】:

    【解决方案2】:

    Java List 有一个(可选的)clear() 方法。

    然后代码将变为:

     job.getItems().clear()
    

    AFAICS Coldfusion9 使用 hibernate 作为 ORM,hibernate 确实在 List 抽象上实现了 clear,甚至会将其转换为对数据库的单个 DELETE 语句。

    【讨论】:

    • +1,因为这将是最佳选择(如果可用)。如果此选项不可用怎么办?或者它绝对可用于“工作”......
    • Hibernate 支持它,JPA 1.0 规范它,......如果它不受支持,我会感到惊讶。
    • 太棒了,我忘记了 ColdFusion 中的 ArrayClear() 调用了 Java 中的 .clear()。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-11-15
    • 2011-12-14
    • 2011-09-04
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 2022-08-14
    • 1970-01-01
    相关资源
    最近更新 更多