2013-10-15 41 views
0

我有一個JPA,我試圖從Oracle數據庫檢索數據。我收到以下錯誤,當我加載頁面:JPA對象[]不是已知的實體類型

java.lang.IllegalArgumentException異常:對象:[[email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected],com。 [email protected][email protected][email protected][email protected][email protected][email protected],com.ProEJT。訂購@ 1398044,[email protected][email protected][email protected][email protected][email protected],com.ProEJT.Order @ 1186cf9]不是已知的實體類型。

我唯一的實體類是訂單:

package com.ProEJT; 

import java.sql.Date; 

import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.Table; 

@Entity(name="Orders") 
@Table(name="Orders") 
public class Order 
{ 
@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
int id; 
private Date created; 
private String sender; 
private String receiver; 
private String input; 
private String output; 
private String state; 

public Order() { 

} 

public Order(int id, Date date, String sender, String receiver, String input, String output, String state) 
{ 
    this.id = id; 
    this.created = date; 
    this.sender = sender; 
    this.receiver = receiver; 
    this.input = input; 
    this.output = output; 
    this.state = state; 
} 

public int getId() 
{ 
    return id; 
} 

public void setId(int id) 
{ 
    this.id = id; 
} 

public Date getCreated() 
{ 
    return created; 
} 

public void setCreated(Date date) 
{ 
    this.created = date; 
} 

public String getSender() 
{ 
    return sender; 
} 

public void setSender(String sender) 
{ 
    this.sender = sender; 
} 

public String getReceiver() 
{ 
    return receiver; 
} 

public void setReceiver(String receiver) 
{ 
    this.receiver = receiver; 
} 

public String getInput() 
{ 
    return input; 
} 

public void setInput(String string) 
{ 
    this.input = string; 
} 

public String getOutput() 
{ 
    return output; 
} 

public void setOutput(String string) 
{ 
    this.output = string; 
} 

public String getState() 
{ 
    return state; 
} 

public void setState(String state) 
{ 
    this.state = state; 
} 
} 

我用它來獲取數據的方法如下:

public List<Order> getOrderList() 
{ 
    factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME); 
    EntityManager em = factory.createEntityManager(); 
    try 
    { 
     em.getTransaction().begin(); 
     Query q = em.createQuery("Select o from Orders o"); 
     @SuppressWarnings("unchecked") 
     List<Order> orders = q.getResultList(); 
     List<Order> orders2 = new ArrayList<Order>(); 
     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); 
      orders2.add(order); 
     } 
     em.persist(orders2); 
     em.getTransaction().commit(); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
    finally 
    { 
     em.close(); 
    } 
    return orders; 
} 

任何幫助將不勝感激。

編輯:

方法Take 2:

public List<Order> getOrderList() 
{ 
    factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME); 
    EntityManager em = factory.createEntityManager(); 

     em.getTransaction().begin(); 
     Query q = em.createQuery("Select o from Order o"); 
     @SuppressWarnings("unchecked") 
     List<Order> orders = q.getResultList(); 
     em.persist(orders); 
     em.getTransaction().commit(); 
    return orders; 
} 
+1

調用'persist'方法只是「保存」你的實例在數據庫中。在你的情況下,變量'orders'已經包含了你使用'q.getResultList()'從數據庫中檢索到的所有'Order'實例。你爲什麼試圖再次拯救他們? – Paolo

+0

持久化調用是多餘的......從查詢中檢索到的對象是MANAGED,因此任何更新都將直接持久化,而無需調用persist。覆蓋在任何像樣的JPA書籍或文檔中 – DataNucleus

回答

0

你不能堅持整個orders2,因爲ArrayList不知道JPA類。可能你應該堅持循環內的每個元素:

 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); 
      orders2.add(order); 
      em.persist(order); 
     } 
+0

我現在編輯了我的代碼並將在問題中進行編輯。我被告知,我根本不需要迭代,因此我會將新方法添加到我的問題中 – DaRoGa

+0

爲什麼在這種情況下調用'em.persist(orders);'? – aim

+0

我已經意識到我對JPA的理解有點過分,所以現在對它進行了排序,錯誤消失了。謝謝 – DaRoGa

相關問題