Java JPA对象[]不是已知的实体类型

Java JPA对象[]不是已知的实体类型,java,jpa,Java,Jpa,我有一个JPA,我试图从Oracle数据库检索数据。我在加载页面时出现以下错误: java.lang.IllegalArgumentException:对象:[com.ProEJT。Order@1f7be7b,com.ProEJT。Order@1fa8988,com.ProEJT。Order@15b44d6,com.ProEJT。Order@1044daf,com.ProEJT。Order@1882d18,com.ProEJT。Order@389922,com.ProEJT。Order@1cda

我有一个JPA,我试图从Oracle数据库检索数据。我在加载页面时出现以下错误:

java.lang.IllegalArgumentException:对象:[com.ProEJT。Order@1f7be7b,com.ProEJT。Order@1fa8988,com.ProEJT。Order@15b44d6,com.ProEJT。Order@1044daf,com.ProEJT。Order@1882d18,com.ProEJT。Order@389922,com.ProEJT。Order@1cda81e,com.ProEJT。Order@d86c58,com.ProEJT。Order@b1404f,com.ProEJT。Order@f5331a,com.ProEJT。Order@1ee145b,com.ProEJT。Order@17a687b,com.ProEJT。Order@16181be,com.ProEJT.Order@8d12e4,com.ProEJT。Order@1d35bf2,com.ProEJT。Order@1398044,com.ProEJT。Order@141d19,com.ProEJT。Order@825459,com.ProEJT。Order@6fb3d6,com.ProEJT。Order@1602bbc,com.ProEJT。Order@d75cf7,com.ProEJT。Order@1186cf9]不是已知的实体类型

我唯一的实体类是Order:

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;
}
public List getOrderList()
{
factory=Persistence.createEntityManagerFactory(Persistence\u UNIT\u NAME);
EntityManager em=factory.createEntityManager();
尝试
{
em.getTransaction().begin();
Query q=em.createQuery(“从订单o中选择o”);
@抑制警告(“未选中”)
列表顺序=q.getResultList();
List orders2=新的ArrayList();
迭代器迭代器=orders.Iterator();
while(iterator.hasNext())
{
Order Order=(Order)迭代器.next();
order.setId(this.id);
order.setCreated(this.created);
order.setSender(本发送方);
order.setReceiver(此.receiver);
order.setInput(this.input);
order.setOutput(this.output);
order.setState(本状态);
订单2.添加(订单);
}
em.persist(orders2);
em.getTransaction().commit();
}
捕获(例外e)
{
e、 printStackTrace();
}
最后
{
em.close();
}   
退货订单;
}
任何帮助都将不胜感激

编辑:

方法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;
}
public List getOrderList()
{
factory=Persistence.createEntityManagerFactory(Persistence\u UNIT\u NAME);
EntityManager em=factory.createEntityManager();
em.getTransaction().begin();
Query q=em.createQuery(“从订单o中选择o”);
@抑制警告(“未选中”)
列表顺序=q.getResultList();
em.persist(订单);
em.getTransaction().commit();
退货订单;
}

您不能持久化整个
订单2
,因为
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);
        }

我现在已经编辑了我的代码,将在问题中进行编辑。有人建议我根本不需要迭代,因此我将在问题中添加新方法。为什么调用
em.persist(orders)
在这种情况下?我意识到我对JPA的理解有点不正确,所以我现在对它进行了分类,错误消失了。感谢您调用
persist
方法“saves”您在数据库中的实例。在您的情况下,变量
orders
已经包含您刚刚使用
q.getResultList()从数据库中检索到的所有
Order
实例
。为什么要再次保存它们?对persist的调用是多余的…从查询中检索到的对象是被管理的,因此任何更新都将被直接持久化,而无需调用persist。在任何像样的JPA书籍或文档中都有介绍