Gestern musste ich mich stundenlang auf die Suche im Netz nach einer Fehlermeldung von EclipseLink machen.

Beim Aufruf von EntityManager.persist() in einem JUnit Test hieß es, dass meine Entity keine Entity wäre und ich kontrollieren sollte, ob ich die Klasse mit @Entity annotiert habe. Ja, natürlich hatte ich das. Und es funktionierte auch nur der Unit Test nicht. Also klar war das eigentlich eine Entity.

Ich war kurz vor dem Verzweifeln... suchte gemeldete Issues durch, ob sich Parallelen zu meiner Situation zeigten. Mein Verdacht ging in Richtung Bug beim Weaven vor dem Testaufruf, aber es könnte ja auch mit JUnit zu tun haben, und versuchte zu eruieren wo die Ursache war. Einige Tests hatten kein Problem.

Photo by Element5 Digital / Unsplash

Erschwerend kam dann hinzu, dass ich mehrere Persistence Units im Test verwendete. Ich baute die Tests um, stellte schon alles auf den Kopf und dann viel es mir wie Schuppen von den Augen: Ein Tippfehler!

Ich hatte für die EntityManagerFactories (jeweils eine für jede PersistenceUnit) kurze Variablen verwendet emfLU und emfDU.

Und mir ist die ganze Zeit nicht aufgefallen, dass ich den EntityManager emDU von der emfLU bezog. Das muss natürlich für emDU auch emfDU sein. Einfach immer überlesen und zum Haare ausreißen gewundert, warum die Entity keine Entity sein soll. Dabei steht die Entity in der falschen PersistenceUnit gar nicht zur Verfügung.

Also klar, dass es nicht funktioniert, aber diese nichtssagende Fehlermeldung dazu. Wird wohl am ClassLoader liegen, dass er mit der Entity-Klasse überhaupt was anfangen kann.

Und alles nur weil, weil ich mir ein paar Buchstaben emfLogin/emfData gespart habe. Mir ist das sicher eine Lehre. So viel Zeit habe ich für einen Buchstaben noch nie erübrigt.