[英]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.