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

ここでの問題は、反復ループを実行するたびに反復が停止せず、反復が継続することです。そのテーブルには 2 行のデータしかありません。この繰り返しが続き、止まらない理由を教えていただけますか? 明らかに、指定された CUSTOMER_ID 値に基づいて、そのテーブル内のすべてのデータを反復したいだけです。

forループ、for eachループ、whileループを試しましたが、どれも機能しません。それは私のコードと関係があるに違いありません。これは私がテストした while ループの 1 つですが、残りのループのように反復を停止しません。

       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

ループで宣言したものをnext呼び出さないためです。iterator代わりにこれを試してください:

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

2 つの別々の反復子を使用します。あなたがすることはこれです:

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 に答える