Wir haben weiter an den Challenges gearbeitet. Grundsätzlich würden wir uns gerne auf die Umsetzung konzentrieren, um die Challenges und alles was dazu gehört zu implementieren. Stattdessen kämpfen wir momentan mit Spring Boot und im Speziellen Spring Data JPA. Scheinbar hatten wir vorher nie Entitäten, die zwei Relationen zu anderen Entitäten hatten. In unserem Fall haben User sowohl Achievements, als auch neuerdings Challenges.
Bereits letzte Woche haben wir mit einer LazyInitializationException gekämpft und wussten nicht weshalb sie auftritt. Diese Woche haben wir zumindest die Ursache gefunden. Um den Fehler nachzustellen, haben wir ein komplett neues Beispiel implementiert und nach und nach Komplexität hinzugefügt, bis der Fehler auftrat.
Letztendlich würde das oben beschriebene Datenmodell problemlos funktionieren, wenn man darauf rein im Controller zugreifen würde. In unserem Fall nutzen wir aber die Annotation @PostConstruct, um beim Starten des Servers ein Testszenario aufzubauen. Hier liegt der Hund begraben. Scheinbar werden bei Zugriffen über die Repositories teilweise neue Sessions gespawnt. Werden Datenzugriffe aus unterschiedlichen Sessions gemischt (bspw. laden der User und separat: gib mir alle Challenges zum User) kommt es zur Exception.
Wir haben versucht das Problem auf unterschiedlichsten Arten zu lösen, aber haben es bis heute nicht hinbekommen. Lösungen waren bspw. die Verwendung von NamedEntityGraphes, Queries im Repositories, die Objekte der Sessions zu syncen und noch viele kleinere Versuche.
Es läuft momentan darauf hinaus, dass wir Spring Data JPA durch ein anderes SQL Framework ersetzen müssen.
Mehr gibt es diese Woche auch nicht zu berichten.