Ich habe das Problem keinen geeigneten Ansatz zu finden Entities, die in einer JavaFX Applikation modifiziert werden richtig mit JPA abzubilden.
Problem hierbei ist, dass man 4-5 States in der Applikation hat:
1. aktuelle Einträge im View bspw. in einem ListView
2. aktuelle Werte in einem ViewModell
3. aktuelle Werte in einem Modell
(4. State im Persistence Context, falls attached oder detached)
5. Werte in der Datenbank
Für jeden Schichtwechsel benötigt man ein anderes Mapping. Bspw. darf man ein ListView nicht direkt mit der Collection eines Modells binden, falls man ein klassiches Fenstern mit Speichern und Abbrechen benutzt. Andernfalls würden Änderungen ohne, dass der User Speichern möchte ins Modell übertragen, selbst wenn Abbrechen gedrückt wird.
Außerdem müssen Beziehungen in den Collections beider Beziehungs-Enden synchron gehalten werden. Mit einem Binding der Oberfläche und dem Modell würde aber nur die Collection einer Entity die Änderung bekommen. Collections werden durch Hibernate durch eigene Collection-Typen ausgetauscht. Change-Listener auf Hibernate-Collections sind nicht implementiert) Mapping 1-2 erfolgt durch Binding. Für das Mapping 2-3 habe ich mir ein ListCompare überlegt (siehe Code).
Durch das Mapping entsteht viel Overhead und es ist fehleranfällig bei Änderungen.
Das ist nur ein Problem von vielen und ich verstehe nicht wie es so schwer sein kann eine Mini-Anwendung konsistent hinzubekommen. Vielleicht kann jemand open-source Projekte referenzieren, die JavaFX und JPA einsetzen, bei denen man sich etwas abschauen kann. Vielleicht ist meine Architektur auch einfach ungeeignet. Ich würde mich über Erfahrungen und Best Practice Ansätze freuen.
Ich habe aus meinem Projekt, bei dem die Probleme auftraten ein minimales Beispiel extrahiert, da es einfacher ist es zu überschauen und Sachen auszuprobieren:
https://github.com/No3x/javafx-springboot-boilerplate-hibernate-lifecycles-1nn1
Problem hierbei ist, dass man 4-5 States in der Applikation hat:
1. aktuelle Einträge im View bspw. in einem ListView
2. aktuelle Werte in einem ViewModell
3. aktuelle Werte in einem Modell
(4. State im Persistence Context, falls attached oder detached)
5. Werte in der Datenbank
Für jeden Schichtwechsel benötigt man ein anderes Mapping. Bspw. darf man ein ListView nicht direkt mit der Collection eines Modells binden, falls man ein klassiches Fenstern mit Speichern und Abbrechen benutzt. Andernfalls würden Änderungen ohne, dass der User Speichern möchte ins Modell übertragen, selbst wenn Abbrechen gedrückt wird.
Außerdem müssen Beziehungen in den Collections beider Beziehungs-Enden synchron gehalten werden. Mit einem Binding der Oberfläche und dem Modell würde aber nur die Collection einer Entity die Änderung bekommen. Collections werden durch Hibernate durch eigene Collection-Typen ausgetauscht. Change-Listener auf Hibernate-Collections sind nicht implementiert) Mapping 1-2 erfolgt durch Binding. Für das Mapping 2-3 habe ich mir ein ListCompare überlegt (siehe Code).
Durch das Mapping entsteht viel Overhead und es ist fehleranfällig bei Änderungen.
Das ist nur ein Problem von vielen und ich verstehe nicht wie es so schwer sein kann eine Mini-Anwendung konsistent hinzubekommen. Vielleicht kann jemand open-source Projekte referenzieren, die JavaFX und JPA einsetzen, bei denen man sich etwas abschauen kann. Vielleicht ist meine Architektur auch einfach ungeeignet. Ich würde mich über Erfahrungen und Best Practice Ansätze freuen.
Ich habe aus meinem Projekt, bei dem die Probleme auftraten ein minimales Beispiel extrahiert, da es einfacher ist es zu überschauen und Sachen auszuprobieren:
https://github.com/No3x/javafx-springboot-boilerplate-hibernate-lifecycles-1nn1