-3

我创建了名为 Reservations 的简单表,该表具有以下列:ID、DUE_DATE、PRODUCTS_PAID、RESERVATION_NAME、SALE、TOTAL_SELL_PRICE 和 CUSTOMER_ID。

现在我想要做的是我想遍历这个给定 CUSTOMER_ID 值的表。这是我按 CUSTOMER_ID 收集所有这些列数据的方法:

   public Collection<Reservations> findReservation(int cuID) {
    EntityManager em = getEntityManager();
    Query q = em.createQuery("SELECT r FROM Reservations r WHERE r.customerData.id = :cID");
    q.setParameter("cID", cuID);
    List results = q.getResultList();
    return results;
}

我的问题是,每当我运行迭代循环时,它都不会停止迭代,而是继续迭代。我在该表中只有两行数据。你能告诉我为什么这个迭代会继续并且不会停止吗?显然,我只想根据给定的 CUSTOMER_ID 值迭代该表内的所有数据。

我已经尝试过 for 循环,for each 循环和 while 循环,但它们都不起作用。这一定与我的代码有关。这是我测试过的一个 while 循环,但它不会像其他循环一样停止迭代:

       for(Iterator itr2 = rd.findReservation(cuID).iterator(); itr2.hasNext();){
        rModel.addRow(Arrays.asList(rd.findReservation(cuID).iterator().next().getId(), 
                rd.findReservation(cuID).iterator().next().getReservationName(),
                rd.findReservation(cuID).iterator().next().getCustomerData().getCustomerName(),
                rd.findReservation(cuID).iterator().next().getCustomerData().getCustomerType(),
                rd.findReservation(cuID).iterator().next().getDueDate(),
                rd.findReservation(cuID).iterator().next().getTotalSellPrice(),
                rd.findReservation(cuID).iterator().next().getSale(),
                rd.findReservation(cuID).iterator().next().getProductsPaid(),
                "Print"));
    }

如果您想知道什么是 cuID,它只是一个从表列接收的整数值。此值为客户 ID。它运作良好。所以它不应该影响代码。感谢所有帮助:)

4

3 回答 3

2

因为你没有调用nextiterator在循环中声明的。试试这个:

for(Iterator itr2 = rd.findReservation(cuID).iterator(); itr2.hasNext();){
    MyObject obj = itr2.next();
    rModel.addRow(Arrays.asList(obj.getId(), 
                                obj.getReservationName(),
                                obj.getCustomerData().getCustomerName(),
                                obj.getCustomerData().getCustomerType(),
                                obj.getDueDate(),
                                obj.getTotalSellPrice(),
                                obj.getSale(),
                                obj.getProductsPaid(),
                                "Print"));
}
于 2013-04-26T10:00:19.013 回答
1

你需要做这样的事情: -

for(Reservations res : rd.findReservation(cuID)){
    // Do whatever you want with this object(res)
    rModel.addRow(Arrays.asList(res.getId(), res.getReservationName()...);
}

这是干净和简单的!无需以您使用过的那种奇怪的方式使用迭代器,它只会不断获得一个新的迭代器并不断从中获取第一个条目,从而导致infinite循环!

于 2013-04-26T10:00:51.443 回答
1

您使用两个单独的迭代器。你要做的是:

while (iterator1.hasNext()) {
  iterator2.next();
}

显然你不会用尽 iterator1。在循环和 rModel 行中使用相同的迭代器:

   Iterator it = rd.findReservation(cuID).iterator();
   while (it.hasNext()) {
     // or whatever your type is
     Object next = it.next();

    rModel.addRow(Arrays.asList(next.getId(), 
            next.getReservationName(),
            next.getCustomerData().getCustomerName(),
            next.getCustomerData().getCustomerType(),
            next.getDueDate(),
            next.getTotalSellPrice(),
            next.getSale(),
            next.getProductsPaid(),
            "Print"));
}
于 2013-04-26T10:01:31.383 回答