簡體   English   中英

使用JPA從數據庫檢索數據

[英]Retrieving data from database using JPA

我正在嘗試使用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();
    }

您正在遍歷列表,同時將其添加到列表中,從而導致了問題。

orders.add(order);

創建一個新列表並向其中添加訂單,然后保留該新列表。

您不能將元素添加到要迭代的更正中。 (您正在使用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();

在調用之后,無需與實體管理者進行任何其他操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM