Ich versuche, meine Klassen Department
und Mandator
für hsqhldb beizubehalten, aber es gibt diesen Fehler.
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.
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.
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.
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
anStellen 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!
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% Untersuchen Sie Ihre mappedBy=xxx
und vergewissern Sie sich, dass xxx
im gesamten Projekt eindeutig ist.
Tags und Links jpa persistence eclipselink