0

JPAの使用に慣れようとしています。そして、非常に立ち往生しています。データベースからデータを取得してフォームに表示しようとしています。次のエラーが表示され続けますが、オンラインで見つけた情報はどれも役に立ちませんでした:

java.util.ConcurrentModificationException

エラーが発生するコードは次のとおりです。

try
    {
        em.getTransaction().begin();
        Query q = em.createQuery("Select o from Order o");
        @SuppressWarnings("unchecked")
        List<Order> orders = q.getResultList();
        Iterator<Order> iterator = orders.iterator();
        while(iterator.hasNext())
        {
            Order order = (Order)iterator.next();

            order.setId(this.id);
            order.setCreated(this.created);
            order.setSender(this.sender);
            order.setReceiver(this.receiver);
            order.setInput(this.input);
            order.setOutput(this.output);
            order.setState(this.state);
            orders.add(order);
        }
        em.persist(orders);
        em.getTransaction().commit();
    }
4

2 に答える 2

0

反復している修正に要素を追加することはできません。(orders.iterator() を使用して注文を反復処理してから、イテレーターの本体で orders.add(order) を実行しようとしています。)

とにかく、構成全体が役に立たない。でオブジェクトのプロパティを変更するだけでorders、変更は自動的にデータベースに保存されますcommit()。最後になりましたが、そこで拡張を使用する必要がforあります。

for (Order order : (List<Order>) q.getResultList()) {
    order.setId(...);
    // ...
}
em.getTransaction().commit();

コメントを見ると、データベースから既存のレコードを取得しようとしているだけで、何も追加または変更していません。その場合、結果をgetResultList()GUIに返すだけです。

return (List<Order>) q.getResultList();

その呼び出しの後、エンティティ マネージャーで他に何もせずに。

于 2013-10-15T13:46:14.913 に答える
0

リストに追加中にリストをループしているため、問題が発生しています。

orders.add(order);

新しいリストを作成し、それに注文を追加してから、その新しいリストを永続化します。

于 2013-10-15T13:44:20.487 に答える