JPA java.lang.IllegalArgumentException:Object:[id = XYZ]不是已知的实体类型

时间:2012-04-01 07:03:28

标签: jpa eclipselink derby javadb

我正面临以下问题: 当我运行我的程序时,我得到以下例外:

  

java.lang.IllegalArgumentException:Object:dviaufgabe1.MeinArtikel [   id = 25]不是已知的实体类型。在

     
    

org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4128)       在     org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:406)       在dviaufgabe1.DVIAufgabe1.persist(DVIAufgabe1.java:78)at     dviaufgabe1.DVIAufgabe1.erstelleBasisDaten(DVIAufgabe1.java:55)at at     dviaufgabe1.DVIAufgabe1.main(DVIAufgabe1.java:22)

  

或(对于自动生成键)

  

java.lang.IllegalArgumentException:Object:dviaufgabe1.MeinArtikel [   id = null]不是已知的实体类型。在   org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4128)     在   org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:406)     在dviaufgabe1.DVIAufgabe1.persist(DVIAufgabe1.java:78)at   dviaufgabe1.DVIAufgabe1.erstelleBasisDaten(DVIAufgabe1.java:56)at at   dviaufgabe1.DVIAufgabe1.main(DVIAufgabe1.java:22)

MeinArtikel.java

 @Entity
    public class MeinArtikel implements Serializable {
        private static final long serialVersionUID = 1L;
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long artikelNummer;

        private String name;
        private String beschreibung;
        private long preis;
        private long lagerbestand;

        public Long getArtikelNummer() {
            return artikelNummer;
        }

        public String getBeschreibung() {
            return beschreibung;
        }

        public long getLagerbestand() {
            return lagerbestand;
        }

        public String getName() {
            return name;
        }

        public long getPreis() {
            return preis;
        }

        public void setBeschreibung(String beschreibung) {
            this.beschreibung = beschreibung;
        }

        public void setLagerbestand(long lagerbestand) {
            this.lagerbestand = lagerbestand;
        }

        public void setName(String name) {
            this.name = name;
        }

        public void setPreis(long preis) {
            this.preis = preis;
        }

        public void setArtikelNummer(Long id) {
            this.artikelNummer = id;
        }

        @Override
        public int hashCode() {
            int hash = 0;
            hash += (artikelNummer != null ? artikelNummer.hashCode() : 0);
            return hash;
        }

        @Override
        public boolean equals(Object object) {
            // TODO: Warning - this method won't work in the case the artikelNummer fields are not set
            if (!(object instanceof MeinArtikel)) {
                return false;
            }
            MeinArtikel other = (MeinArtikel) object;
            if ((this.artikelNummer == null && other.artikelNummer != null) || (this.artikelNummer != null && !this.artikelNummer.equals(other.artikelNummer))) {
                return false;
            }
            return true;
        }

        @Override
        public String toString() {
            return "dviaufgabe1.MeinArtikel[ id=" + artikelNummer + " ]";
        }

主要课程:

public class DVIAufgabe1 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        erstelleBasisDaten();
    }
    public static void erstelleBasisDaten() {
        MeinArtikel a1 = new MeinArtikel();
//        a1.setArtikelNummer(23L);
        a1.setName("Bachelor of Science - Informatik (WH)");
        a1.setBeschreibung("Informatik Bachelor der Westfälischen Hochschule");
        a1.setPreis(0L);
        a1.setLagerbestand(100L); 

        MeinArtikel a2 = new MeinArtikel();
//                a2.setArtikelNummer(24L);
        a2.setName("Master of Science - Informatik (WH)");
        a2.setBeschreibung("Informatik Master der Westfälischen Hochschule");
        a2.setPreis(100L);
        a2.setLagerbestand(50L); 

        MeinArtikel a3 = new MeinArtikel();
//                a3.setArtikelNummer(25L);
        a3.setName("Master of Science - Informatik (TU München)");
        a3.setBeschreibung("Informatik Master der TU München");
        a3.setPreis(10000L);
        a3.setLagerbestand(5L); 

        MeinArtikel a4 = new MeinArtikel();
//                a4.setArtikelNummer(26L);
        a4.setName("Abitur NRW");
        a4.setBeschreibung("Abitur der Klasse 13");
        a4.setPreis(1000L);
        a4.setLagerbestand(500L); 

        persist(a1);
        persist(a2);
        persist(a3);
        persist(a4);

    }

    public static void persist(Object object) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("DVIAufgabe1PU");
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        try {
            em.persist(object);
            em.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            em.getTransaction().rollback();
        } finally {
            em.close();
        }
    }

persictence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
  <persistence-unit name="DVIAufgabe1PU" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <class>dviaufgabe1. MeinArtikel</class>
    <class>dviaufgabe1.MeineKategorie</class>
    <properties>
      <property name="javax.persistence.jdbc.url" value="jdbc:derby://localhost:1527/DVIAufgabe1"/>
      <property name="javax.persistence.jdbc.password" value="myuser"/>
      <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver"/>
      <property name="javax.persistence.jdbc.user" value="myuser"/>
      <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
    </properties>
  </persistence-unit>
</persistence>

2 个答案:

答案 0 :(得分:2)

首先,您应该删除persistence.xml中的空格,就在第一个标记类中的“MeinArtikel”之前。之后

<class>dviaufgabe1.MeineKategorie</class> 

添加此行

<exclude-unlisted-classes>false</exclude-unlisted-classes> 

答案 1 :(得分:1)

你在“MeinArtikel”之前的persistence.xml中缺少一个空格