JPA EntityManager.detach () lädt noch faule Beziehungen

Ich habe ein Problem, das meinem Verständnis der Funktionsweise zuwiderläuft. Ich habe einen Arquillian-Test, der eine Repository-Methode mit einer JPA-Abfrage testet.

Der Test speichert ein Objekt und speichert dann ein anderes Objekt mit dem ersten gespeicherten Objekt in einem Feld. Dann ruft es die Repository-Methode auf. Als nächstes trennt sich der Test (und löscht den Entitymanager, prüft, ob das Objekt nicht in em etc etc enthalten ist). Zuletzt prüft der Test, ob das zugehörige Objekt vorhanden ist oder nicht (dies sollte nicht der Fall sein, da die Abfrage die Beziehung nicht lesen soll).

Wie erwartet ist das zugehörige Objekt beim Betrachten des Debuggers null, aber wenn die Zusicherung tatsächlich die getRelatedObject-Methode verwendet, wird das zugehörige Objekt geladen.

Pseudocode zu klären (ich hoffe):

FirstObject f = new FirstObject();
em.persist(f);
SecondObject s = new SecondObject();
s.setFirstObject(f);
em.persist(f);
MyRepo r = new MyRepo();
SecondObject result = r.runQuery(f.getId());
em.detach(result); //result.getFirstObject is null
em.clear();
assertIsNull(result.getFirstObject()); //loads first object and test fails

Ist es meines Wissens falsch, sollte das zugehörige Objekt noch geladen werden? Ich habe eine LazyInit-Ausnahme erwartet.

Wenn ich falsch verstehe, wie kann ich überprüfen, ob bei einer Abfrage verwandte Objekte nicht gefüllt werden?

(Ja, es ist besser, Dto-Objekte anstelle der Entität zu verwenden, ich weiß ... wir hatten diese Diskussion und ich wurde überstimmt)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage