JPA java.lang.IllegalArgumentException: Объект: [id=XYZ] не является известным типом сущности

Я столкнулся со следующей проблемой: когда я запускаю свою программу, я получаю следующие исключения:

java.lang.IllegalArgumentException: Объект: 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) в dviaufgabe1.DVIAufgabe1.erstelleBasisDaten(DVIAufgabe1.java:55) в dviaufgabe1.DVIAufgabe1.main(DVIAufgabe1.java:22)

или (для ключей автогенерации)

java.lang.IllegalArgumentException: Объект: 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) в dviaufgabe1.DVIAufgabe1.erstelleBasisDaten(DVIAufgabe1.java:56) в 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();
        }
    }

настойчивость.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>

person AliveAndWell    schedule 01.04.2012    source источник


Ответы (2)


Во-первых, вы должны удалить пробел в файле persistence.xml прямо перед «MeinArtikel» в первом классе тегов. Затем после

<class>dviaufgabe1.MeineKategorie</class> 

добавить эту строку

<exclude-unlisted-classes>false</exclude-unlisted-classes> 
person Trinity RX    schedule 21.04.2014

вам не хватает пробела в файле persistence.xml прямо перед "MeinArtikel"

person k5_    schedule 01.04.2012
comment
То есть у вас есть лишний пробел в теге ‹class› в xml. - person Bryan Pendleton; 01.04.2012