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.
JPA Controller auch im Standard erzeugt:
Das Laden eines Datensatzes mit ID=1
Der Fehler:
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
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: