JPA Object []不是已知的实体类型 [英] JPA Object [] is not a known entity type

查看:163
本文介绍了JPA Object []不是已知的实体类型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个JPA,我正在其中尝试从Oracle数据库检索数据.加载页面时出现以下错误:

I have a JPA in which I am trying to retrieve data from an Oracle database. I get the following error when I load the page:

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]不是已知的实体类型.

java.lang.IllegalArgumentException: Object: [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] is not a known entity type.

我唯一的实体类是Order:

My only entity class is 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;
}
}

我用来检索数据的方法如下:

The method I use to retrieve the data is as follows:

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;
}

任何帮助将不胜感激.

方法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;
}

推荐答案

您不能持久保存整个orders2,因为ArrayList不是JPA感知类.也许您应该将每个元素都保留在循环中:

You can't persist whole orders2, because ArrayList is not JPA aware class. Probably you should persist each element inside loop:

        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);
        }

这篇关于JPA Object []不是已知的实体类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆