JPA Fehler beim JPA-Projekt

alaska94

Aktives Mitglied
Hallo,

ich bin mehrere Jahre raus aus der Programmierung, vor allem aus der Java-Welt. Ich will mich aber gerade für mein Team, dass ich betreue, wieder mal mit einigen Themen beschäftigen.

Ich möchte eine kleine Java-EE Anwendung bauen, die aus mehreren Schichten besteht.

Ich habe mit den JPA-Entities angefangen(Meine PersistenceSchicht. Ob ein Objekt in einer "DERBY" DB gespeichert werden kann, wollte ich mittels Unittest testen, doch leider bekomme ich folgende Fehlermeldung:

Exception Description: Unable to acquire a connection from driver [null], user [null] and URL [null]. Verify that you have set the expected driver class and URL. Check your login, persistence.xml or sessions.xml resource. The jdbc.driver property should be set to a class that is compatible with your database platform

Ich Benutze Eclipse. Mit Eclipse selber kann ich mich auf das DBMS und die DB schalten, dass ist kein Problem.

Meine Anwendung sieht wie folgt aus:

Java:
import java.io.Serializable;
import java.lang.String;
import javax.persistence.*;

import jakarta.persistence.DiscriminatorColumn;
import jakarta.persistence.DiscriminatorType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Inheritance;
import jakarta.persistence.InheritanceType;

/**
* Entity implementation class for Entity: Kunde
*
*/
@Entity

@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "Art_kunde", discriminatorType = DiscriminatorType.STRING)
public abstract class Kunde implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
    private String nachname;
    private String vorname;
    private static final long serialVersionUID = 1L;

    public Kunde() {
        super();
    }

    public long getId() {
        return this.id;
    }

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

    public String getNachname() {
        return this.nachname;
    }

    public void setNachname(String nachname) {
        this.nachname = nachname;
    }

    public String getVorname() {
        return this.vorname;
    }

    public void setVorname(String vorname) {
        this.vorname = vorname;
    }

}
Java:
import java.io.Serializable;

import javax.persistence.Entity;

import jakarta.persistence.DiscriminatorValue;

/**
* Entity implementation class for Entity: Firmenkunde
*
*/
@Entity
@DiscriminatorValue("Firmenkunde")
public class Firmenkunde extends Kunde implements Serializable {

   
    private static final long serialVersionUID = 1L;
    private String IdNr;

    public String getIdNr() {
        return IdNr;
    }

    public void setIdNr(String idNr) {
        IdNr = idNr;
    }

    public Firmenkunde() {
        super();
    }
  
}

Java:
import org.junit.Before;
import org.junit.Test;

import de.mertens.persistence.entity.Firmenkunde;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;

public class KundeTest {

    private EntityManager em;

    @Before
    public void setUp() throws Exception {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Kunde");
        em = emf.createEntityManager();

    }

    @Test
    public void speichereKunde() {
        em.getTransaction().begin();
        Firmenkunde fKunde = new Firmenkunde();
        fKunde.setIdNr("123456");
        fKunde.setVorname("Max");
        fKunde.setNachname("Mustermann");
        em.persist(fKunde);
        em.getTransaction().commit();
        em.close();       
    }
XML:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2" 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_2.xsd">
    <persistence-unit name="Kunde" transaction-type="RESOURCE_LOCAL">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <class>de.mertens.persistence.entity.Kunde</class>
        <class>de.mertens.persistence.entity.Firmenkunde</class>
        <class>de.mertens.persistence.entity.Privatkunde</class>
        <properties>
            <property name="javax.persistence.jdbc.url" value="jdbc:derby://localhost:1527/sample;create=true"/>
            <property name="javax.persistence.jdbc.user" value="user"/>
            <property name="javax.persistence.jdbc.password" value="user"/>
            <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver"/>
        </properties>
    </persistence-unit>
</persistence>

Ja ich weiß, es ist kein guter Unit-Test, aber ich wollte nur schauen, ob eine Verbindung aufgebaut wird, und ob ein EIntrag geschrieben wird. Ich hätte auch einfach eine Main schreiben können, um den gleichen Effekt zu erzielen.

Was habe ich noch gemacht. Die DB läuft, ich kann mich auch mittels Eclipse auf die DB draufschalten, genau diese Einstellungen, habe ich auch für die persistence.xml verwendet. Ich habe die derbyclient.jar und derby.jar in den Clathpath eingebunden.

Was mache ich noch falsch?? Es muss doch möglich sein, diesen Unit-Test ohne tomcat-EE zu starten oder nicht???

die persistence.xml liegt im Ordner src\META-INF

Vielleicht kann mir jemand helfen

Viele Grüße

Alaska
 

LimDul

Top Contributor
Wo liegt die persistence.xml?

Gerade gesehen - sollte eigentlich passen. Das ist ein reines Java Projekt, kein Maven oder Gradle?
 

alaska94

Aktives Mitglied
So ich bin jetzt schonmal weiter, schien ein Fehler in der Persistence XML zu sein, ich habe nach einigen Suchen eine gefunden, die funktioniert.

XML:
<?xml version="1.0" encoding="UTF-8"?>
    <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
        <persistence-unit name ="Kunde">
            <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
            <class>de.mertens.persistence.entity.Kunde</class>
            <class>de.mertens.persistence.entity.Firmenkunde</class>
            <class>de.mertens.persistence.entity.Privatkunde</class>
            <properties>
                <property name="eclipselink.target-database" value="Derby"/>
                <!-- JDBC connection properties -->
                <property name="eclipselink.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver"/>
                <property name="eclipselink.jdbc.url" value="jdbc:derby://localhost:1527/sample;retrieveMessagesFromServerOnGetMessage=true;create=true;"/>
                <property name="eclipselink.jdbc.user" value="user"/>
                <property name="eclipselink.jdbc.password" value="user"/>
            </properties>
        </persistence-unit>
    </persistence>

Jetzt bekomme ich aber einen weiteren Fehler

java.lang.IllegalArgumentException: Object: de.mertens.persistence.entity.Firmenkunde@5e1fa5b1 is not a known Entity type.
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4326)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:596)
at de.mertens.persistence.entity.test.KundeTest.speichereKunde(KundeTest.java:29)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:89)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:542)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:770)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:464)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:210)
 

LimDul

Top Contributor
Du vermischst javax.persistence und jakarta.persistence Annotationen. Ich bin mir nicht sicher ob das geht. (Ich selber bin hier gerade noch auf Java 8, da ist noch alles in javax vorhanden, keine Ahnung ob das in neueren Versionen umgezogen ist)
 

alaska94

Aktives Mitglied
Ich habe jetzt alles auf jakarta-persistence umgestellt, weil ich eine Warnung bekommen habe, dass die andere deprecated sind. Trotzdem das selbe Bild :(
 

LimDul

Top Contributor
Ganz banale Frage - die Klassen liegen auch im Package de.mertens.persistence.entity? (Da die Import Statements da sind, aber die package Deklaration nicht, frag ich nach).
 

alaska94

Aktives Mitglied
Anbei mal ein Beispielprojekt mit Maven.
Danke, das funktioniert solange gut, bis ich gegen meine Datenbank Connecten möchte, dann kommt auch hier der Fehler.

java.lang.IllegalArgumentException: Object: de.mertens.kundenwerte.entity.Customer@3d3ba765 is not a known Entity type.
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4328)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:601)
at de.mertens.kundenwerte.test.CustomerTest.lambda$0(CustomerTest.java:52)
at de.mertens.kundenwerte.test.CustomerTest.lambda$2(CustomerTest.java:67)
at de.mertens.kundenwerte.test.CustomerTest.fromTx(CustomerTest.java:60)
at de.mertens.kundenwerte.test.CustomerTest.inTx(CustomerTest.java:66)
at de.mertens.kundenwerte.test.CustomerTest.sillyTest(CustomerTest.java:52)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:89)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:542)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:770)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:464)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:210)
 

mihe7

Top Contributor
Danke, das funktioniert solange gut, bis ich gegen meine Datenbank Connecten möchte, dann kommt auch hier der Fehler.
Hast Du das in Dein Eclipse-Projekt kopiert?!? Nimm mal das zip und bearbeite dort nur die persistence.xml im Test-Zweig (-> an Deine DB-Verbindung anpassen) und ggf. die Klasse Customer (->an Deine Felder anpassen). Die pom.xml mal unangetastet lassen. Das sollte funktionieren.
 

M.L.

Top Contributor
Eine weitere Idee: das 'alte' JDBC-Projekt müsste man mittels Eclipse (und Plugins für JEE) in ein JPA-Projekt umwandeln können. Projekt im "Package Explorer" ansteuern, rechte Maustaste, Configure, Convert to jpa
Eclipse_Convert_to_JPA_Project.png
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Fehler beim deployen von seam 2.2.2-Projekt Allgemeines EE 9
M Servlet Fehler beim Start der Serveranwendung Allgemeines EE 3
H fehler beim deployen von ear file Allgemeines EE 2
A Problem / Fehler beim Einbinden einer Klasse in ein JSP Allgemeines EE 20
F Fehler beim deployen von jsp und servlet Allgemeines EE 7
K [Sun AppServer 8.1] Fehler beim deployen Allgemeines EE 12
D Fehler wegen Rest-Schnittstelle Allgemeines EE 4
pkm "Unable to cache bundle"-Fehler bei Apache Karaf Allgemeines EE 0
H JWebUnit Fehler: java.lang.NoClassDefFoundError: org/apache/regexp/RESyntaxException Allgemeines EE 24
mor16Euro Servlet Fehler code: The requested resource is not available Allgemeines EE 7
N Fehler 403 bei Sessiontimeout mit <security-constraint> Allgemeines EE 0
Q Fehler InitialContext.lookup Allgemeines EE 3
A LDAP Auth Fehler Allgemeines EE 5
Ezra BIRT - Report erzeugt Fehler Allgemeines EE 26
JimPanse Tomcat Fehler nach redeploy Allgemeines EE 5
Z OSGi Implementierung - Fehler bei Import Package Allgemeines EE 9
E Fehler bei SQL Abfrage MAX Allgemeines EE 10
M Fehler bei Javamail Session mit Glassfish 3 Allgemeines EE 3
C WebStart Fehler nach update auf Java 1.6 Allgemeines EE 2
A jsf: Servlet aufrufen, wie geht das? web.xml Fehler? Allgemeines EE 13
M Fehler in JSF Anwendung Allgemeines EE 4
J Konvertierungs-Fehler: Wert ''{0}'' für Modell ''{1}'' Allgemeines EE 10
N Jboss als Dienst -> Fehler 1053 Allgemeines EE 1
G Fehler, wenn <f:view> Tag als Startseite Allgemeines EE 2
R auf der Suche nach dem Fehler,Sessions + Arrays Allgemeines EE 4
K Datatable Löschen Fehler Allgemeines EE 6
G JSTL Fehler Allgemeines EE 2
F Buildscript Fehler weblogic/Deployer Allgemeines EE 2
T Jsp die mehrere Servlets aufruft erzeugt Fehler Allgemeines EE 10
M Fehler aufruf von Index.html Allgemeines EE 7
M EJB Fehler Allgemeines EE 2
D Hilfe beim Quartz Scheduler Allgemeines EE 11
K Konfiguration beim AppServer Allgemeines EE 4
B @Startup - FileWatcher - Probleme beim Hochfahren des Servers Allgemeines EE 4
I Erhöhte Sicherheit beim Login Allgemeines EE 1
S MessageDrivenBean Problem beim Zugriff auf Stateful EJB Allgemeines EE 2
S OpenJPA-Exception beim Tomee Allgemeines EE 0
B Problem beim Lesen des Codes... Allgemeines EE 2
R JPA Problem beim Speichern eines Users Allgemeines EE 2
D Jboss löscht Archiv nicht beim Redeployed Allgemeines EE 3
Fu3L Probleme beim Einrichten Allgemeines EE 3
B Cookie beim erstem Zugriff auf Web-App ablegen Allgemeines EE 3
B Problem beim einbinden einer CSS in eine JSP Allgemeines EE 8
S Eclipse: Teilmodule beim Testen werden nicht gestartet Allgemeines EE 2
S Embedded JBoss Problem beim Deployment Allgemeines EE 4
G Exception beim versenden einer Mail Allgemeines EE 3
A Tomcat, Exceptions beim redeploy Allgemeines EE 4
H GWT Problem beim Ausführen Allgemeines EE 8
E Performance-Problem beim ersten Request Allgemeines EE 4
MQue URL im Brower beim Starten der Anwendung richtig setzen Allgemeines EE 4
M J2EE beim SCJA Allgemeines EE 4
M JSP: Tomcat: Serverfehler 500 nur beim IE. Allgemeines EE 2
M Absturz beim Einbinden des PostgreSQL-Treibers Allgemeines EE 4
K BatchUpdateException beim schreiben in DB Allgemeines EE 12
M EJB Löschen von DB-Daten beim Deployen verhindern Allgemeines EE 2
M tomcat beim booten mit starten Allgemeines EE 4
G JBoss nutzt beim starten ständig das Root.war Allgemeines EE 12
B Fehlermeldung beim ausführen des Clients // Need Help Allgemeines EE 2
P jar-File aus war-File beim Deploy automatisch entpacken Allgemeines EE 2
M servlet --> jsp - problem beim umstrukturieren Allgemeines EE 5
T Probleme beim Einsatz von J2EE / JBoss Allgemeines EE 4
F Wie Heapsize beim Tomcat erhöhen? Allgemeines EE 3
G suche Hilfe beim TreeView Servlet Allgemeines EE 8
N Wie heisst das was der Client beim Http Server anfragt? Allgemeines EE 6
F richtige vorgehensweise beim logout Allgemeines EE 6
F Fehlermeldung beim redirect in der JSP Allgemeines EE 4
F Package beim Cookie-setzten über BEAN nicht gefunden Allgemeines EE 4
T Design/Performance-Frage beim servlet (static oder nicht) Allgemeines EE 35
M NetBeans 5.5 installiert und schon hängt was beim Deployen Allgemeines EE 5
G Servlet beim Absenden eines Formulars aufrufen Allgemeines EE 11
M Probleme beim Performancetuning des Servlets Allgemeines EE 2
T Änderung des Wertes einer Variable beim Klick auf Link Allgemeines EE 7
FsMarine Probleme beim ausführen von JSP dateien unter Tomcat Allgemeines EE 4
M Probleme beim Webservice Deployment(Sun ApplicationServer) Allgemeines EE 2
B Problem beim Deployen auf Sun AS 8.1 Allgemeines EE 12
R Problem beim hochladen einer Web Application Allgemeines EE 16
H Problem beim Umstieg von 1.3 auf 1.4 Allgemeines EE 5
pkm Gibt es einen Redirect von der Tomcatstartseite auf ein Projekt? Allgemeines EE 4
R Docker für Windows in Microservices-Projekt Allgemeines EE 2
D Einfaches Java Projekt funktioniert nicht Allgemeines EE 3
P JavaEE- Projekt in Netbeans Allgemeines EE 0
B EJB3.0 Projekt - Eclipse Allgemeines EE 1
D Java Projekt goes Webservice Allgemeines EE 6
N Dynamic Web Projekt und SVN Allgemeines EE 25
T Größeres Java EE Beispiel Projekt Allgemeines EE 4
J JEE6 projekt setup Allgemeines EE 2
K Projekt bei seam2 belassen oder auf JEE6 portieren Allgemeines EE 29
M Wegweiser für Projekt einer Katastrophen-Stab-SW gesucht! Allgemeines EE 2
J Wicket-Projekt: "Unable to create application..." Allgemeines EE 2
J Wicket-Projekt: Klasse LoggerFactory fehlt Allgemeines EE 2
D maven für javaEE projekt Allgemeines EE 20
I Für dieses Projekt ausreichend? Allgemeines EE 6
C JEE Projekt Ideen Allgemeines EE 4
I Web-Projekt zum Laufen bringen unter Eclipse Allgemeines EE 3
N erstes Java EE Projekt - Server/ EJB-Verbindung-Anfängerfage Allgemeines EE 17
G Simples JSF-Projekt in Eclipse - Problem Allgemeines EE 9
I Eclipse Projekt SVN, Informationen löschen Allgemeines EE 3
K Sriplets & Servlets: Offline Projekt auf Server realisie Allgemeines EE 2
M Bibliotheken ins Projekt oder auf den Server stellen? Allgemeines EE 4
C Applet in "Dynamic Web Projekt" - Kann Klasse nich Allgemeines EE 2

Ähnliche Java Themen

Neue Themen


Oben