Netbeans 11 und Eclipse JPA 2.5 Entity wird nicht gefunden

Das Problem ist schon im Fremdsprachigem Internet, aber ohne funktionierende Lösung.

Mein Ziel ist in meinen Programmen die Datenbanken mit JPA zu verarbeiten. 2002/2003 habe ich mir eigene DAO-Factories entwickelt, möchte mit neuen Projekten aber zum Standard.

Datenbank mit Tabelle foo erstellt. Entity davon im Standard erzeugt.
Java:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package database;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;

@Entity
@Table(name = "foo")
@NamedQueries({
    @NamedQuery(name = "Foo.findAll", query = "SELECT f FROM Foo f"),
    @NamedQuery(name = "Foo.findById", query = "SELECT f FROM Foo f WHERE f.id = :id"),
    @NamedQuery(name = "Foo.findByFoocol", query = "SELECT f FROM Foo f WHERE f.foocol = :foocol")})
public class Foo implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "id")
    private Integer id;
    @Basic(optional = false)
    @Column(name = "foocol")
    private String foocol;

    public Foo() {
    }

    public Foo(Integer id) {
        this.id = id;
    }

    public Foo(Integer id, String foocol) {
        this.id = id;
        this.foocol = foocol;
    }

    public Integer getId() {
        return id;
    }

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

    public String getFoocol() {
        return foocol;
    }

    public void setFoocol(String foocol) {
        this.foocol = foocol;
    }

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

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

    @Override
    public String toString() {
        return "database.Foo[ id=" + id + " ]";
    }
   
}
JPA Controller auch im Standard erzeugt:

Java:
public class FooJpaController implements Serializable {

    public FooJpaController(EntityManagerFactory emf) {
        this.emf = emf;
    }
....
    public Foo findFoo(Integer id) {
        EntityManager em = getEntityManager();
        try {
            return em.find(Foo.class, id);
        } finally {
            em.close();
        }
    }
....
Das Laden eines Datensatzes mit ID=1
Java:
       EntityManagerFactory emf = Persistence.createEntityManagerFactory( "FooDatabase" );
        FooJpaController fjc = new FooJpaController(emf);
        Foo foo = fjc.findFoo(1);
Der Fehler:
Java:
Exception in thread "main" java.lang.IllegalArgumentException: Unknown entity bean class: class database.Foo, please verify that this class has been marked with the @Entity annotation.
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.find(EntityManagerImpl.java:707)
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.find(EntityManagerImpl.java:588)
    at database.FooJpaController.findFoo(FooJpaController.java:124)
Im Internet gibst Hinweise Entitybeschreibung ist falsch. Habe automatisch erstellt und ausführlich gescheckt.
Habe auch die Idee mit Fehler unterschiedliche class loader zur Laufzeit gefunden. Aber komme nicht weiter.

Habe in der DatabaseSessionImpl (org.eclipse.persistence.internal.sessions.DatabaseSessionImpl;) analysiert komme aber ohne Quellen der weiteren Klassen nicht weiter.

Wer hat diese Problem gelöst?

persistence.xml
XML:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
  <persistence-unit name="MiwisDatabase" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <!-- Add the following to work around exception issue -->
    <class>database.Foo</class>
    <!--exclude-unlisted-classes>false</exclude-unlisted-classes-->
    <class>database.User</class>
    <class>database.UserMandant</class>
    <properties>
      <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/foo"/>
      <property name="javax.persistence.jdbc.user" value="root"/>
      <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
      <property name="javax.persistence.jdbc.password" value="keins"/>
    </properties>
  </persistence-unit>
</persistence>
 
Zuletzt bearbeitet von einem Moderator:
Das Problem habe ich Eclipse nicht gehabt. Dort funktioniert es wie beschrieben. Da es aber interessant ist, bbin ich an einer Lösung in Netbeans noch immer interessiert.
 
Naja, vermutlich wird es irgendwas mit den Projekteinstellungen zu tun haben. Ist es ein Maven-Projekt?
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben