jpa verwendet eine Nicht-Entität [Klasse ch.printsoft.mailhouse.usergr.entity.Department] als Zielentität im Beziehungsattribut

7

Ich versuche, meine Klassen Department und Mandator für hsqhldb beizubehalten, aber es gibt diesen Fehler.

%Vor%

Dies sind die Klassen, die ich in meiner Datenbank beibehalten möchte. Ich weiß wirklich nicht, was das Problem ist.

%Vor%

Ich habe wirklich alles versucht, aber es hat nicht funktioniert.

    
Miguel Iglesias 02.12.2011, 08:44
quelle

7 Antworten

33

Stellen Sie sicher, dass Sie beide Klassen in Ihrer Datei persistence.xml aufgelistet haben und beide Klassen im Klassenpfad sind.

Bitte fügen Sie Ihre persistence.xml bei.

    
James 05.12.2011 18:18
quelle
19

Ich habe gerade viel Zeit damit verbracht, einen scheinbar unerklärlichen Fall dieser Ausnahme zu debuggen, also verlasse ich meine Geschichte einfach hier.

Wenn Sie eine etwas ältere JPA-Implementierung (z. B. EclipseLink 2.5.x) verwenden und moderne Java 8-Funktionen (z. B. Lambda-Ausdrücke) in Ihrer Codebasis verwenden, sollten Sie nie verwende sie in den JPA-Entity-Klassen.

Der Klassen-Metadaten-Parser von EclipseLink 2.5 stürzt ab, wenn Java 8-Funktionen (wie Lambda-Ausdrücke, Methodenreferenzen usw.) im Bytecode gefunden werden. Der interne Absturz ist ein sehr unfreundliches ArrayIndexOutOfBoundsException , aber Sie können es nicht einmal sehen, da der Weaver-Code stillschweigend ignoriert Metadaten-Parser abstürzt und einfach davon ausgeht, dass die Klasse keine interessanten Metadaten enthält. Dies führt zu der Annahme, dass die betreffende Klasse keine Entität ist, obwohl sie alle richtigen Annotationen enthält, und das Endergebnis ist die Fehlermeldung, über die wir sprechen.

Unterste Zeile: Verwenden Sie keine Java 8-lambdas in JPA-Entitätsklassen. EVER.

    
kFYatek 11.10.2016 15:27
quelle
2

Ich hoffe, das kann jemandem helfen.

Ich hatte das gleiche Problem. In der Nacht zuvor war alles in Ordnung. In NetBeans habe ich mit Hilfe von History alle am Fehler beteiligten Dateien überprüft. Persistence.xml enthalten. Nichts wurde verändert.

Ich habe das auch manuell überprüft. Ich habe versucht, alle in diesem Thread vorgeschlagene Lösung sogar zu eclipselink 2.6.4 zu migrieren. Ich habe die Klasse 2, die in der Datei persistence.xml enthalten ist, entfernt, gespeichert und erneut hinzugefügt. Der Fehler war immer noch da.

Dann habe ich ALLE Klassen in der Liste der Entity-Klassen entfernt, die in der Datei persistence.xml enthalten sind, und dann habe ich sie wieder eingefügt.

Jetzt funktioniert es. Magisch.

Aber wirklich gab es keinen Unterschied in der Geschichte. Sogar ein einzelnes Zeichen.

    
Cinzia Satana 11.08.2017 15:26
quelle
1

Entfernen Sie mappedBy aus @OneToMany-Annotationen aus der Mandator-Klasse

Überprüfen Sie, ob alle zugehörigen Klassen als @Entity zugeordnet sind. Die Abteilungsklasse hat eine @ManyToMany-Beziehung zu DocumentUser. Geben Sie die Auflistung der DocumentUser-Klasse

an     
Der Fehler
WeMakeSoftware 02.12.2011 08:49
quelle
0

Stellen Sie sicher, dass sich beide "class" -Dateien im selben jar befinden. Stellen Sie sicher, dass Sie nicht über zwei .class-Dateien mit demselben Name verfügen!

    
Marcin Cinik 04.09.2012 08:18
quelle
0

Stellen Sie sicher, dass beide Klassen die Eigenschaft von PK und den Konstruktor für keine Parameter haben. Ich füge den folgenden Code in meine Entitätsklasse ein.

%Vor%     
peirong.an 04.08.2015 06:04
quelle
0

Untersuchen Sie Ihre mappedBy=xxx und vergewissern Sie sich, dass xxx im gesamten Projekt eindeutig ist.

    
WesternGun 30.10.2015 00:05
quelle

Tags und Links