Spring und JPA

  • Themenstarter Themenstarter Gast2
  • Beginndatum Beginndatum
Achso du willst auf das ChangeTracking zugreifen? hmm ok.

Zur Not AOP Proxy der die passenden set-Methoden abfängt und irgendwo einen Vermerk macht 😀
 
Mhm ja mal schauen^^ hört sich nicht nach einer sauberen Lösung an.

Ich hol mal bischen weiter aus fürs bessere Verständniss meines Problems.

Ich habe meine Models mit EMF generieren lassen und mit Teneo die orm.xml gemacht. Das hat ganz gut geklappt.
Dann wollte ich eine saubere Lösung finden für die isDirty Methode in einem Eclipse RCP Editor. Und ich wollte natürlich nur das Speichern anbieten wenn das Objekt auch dirty ist bzw. wenn was geändert wurde (sowie beim Eclipse Java Editor). Dann hat mir wildcard gesagt benutz Resourcen für das speichern und laden von EMF Models die unterstützen die TrackingModification. Wo ich mir dann den src angeschaut hab wird das für EclipseLinkResource (siehe oben) nicht unterstützt und die Abfragen mit EclipseLinkResource sind auch sehr umständlich und um alle Abfragen durchzuführen muss man die Klasse teilweise selbst implmenentieren.
Joa und deshalb such ich gerade ne andere Möglichkeit 😉, um das sauber hinzukriegen. Vielleicht bietet EMF oder so noch ne Möglichkeit für changes.
 
Ja aber dann ist eine AOP-Proxy-Version doch super. Du musst ja nicht mal wissen welches Feld geändert wurde, sondern nur generell ob was geändert ist.

Ergo Mini-Interceptor welcher das originale Objekt rausgeben kann (für EclipseLink / JPA) und ansonsten alle Set-Methoden abfängt und isDirty auf true setzt.
 
Also ich würde im RCP Editor nicht auf dem Original Objekt arbeiten sondern auf einer Kopie.
Wenn beim Speichern was schiefgeht, was zeigst du an?

Um rauszufinden ob sich was geändert hat, kann man einfach die Kopie mit dem Original vergleichen.
Wenn das Speichern fehlschlägt, kann man wieder das original Kopieren.

Wenn der User nicht Speichern will (Abbrechen), was machst du dann? Du musst es neu laden.
Mit der Kopie nicht nötig.

etc.

Das ganze kann man dan noch hübsch verpacken (als aufgebohrten Proxy) und dann kann man auch richtig hübsch dami arbeiten 🙂
 
Für equals und hashcode kann man dann sowas nehmen (Kann man ja für den eigenen Bedarf noch anpassen):

Annotation driven equals and hashCode - JBoss Community

Java:
    @Override
    public boolean equals(Object obj) {
        return BeanUtils.equals(this, obj);
    }
 
    @Override
    public int hashCode() {
        return BeanUtils.hashCode(this);
    }
 
    @Override
    public String toString() {
        return BeanUtils.toString(this);
    }

Den Spaß kann man dann noch in ne Abstrakte klasse auslagern und dann ist davon garnix im eigentlichen Pojo. Bei Bedarf kann man das dann auch überschreiben wie man will (Besser als AOP und Co finde ich).

Und fürs kopieren kann man auch Serialisierung verwenden, sind ja eh alles nur pojos (sollten es zumindest sein denk ich). Ist zwar ein wenig langsamer als clone, aber darauf kommts nicht an (das wird man normalerweise nicht merken).

Und der Code bleibt schön sauber. Komplexe Objekthierarchien mit Maps etc sind für den Client sowieso ungeeignet,
von daher bekommst du da im normalfall auch keine Probleme.
 
Zuletzt bearbeitet von einem Moderator:
Also ich würde im RCP Editor nicht auf dem Original Objekt arbeiten sondern auf einer Kopie.
Wenn beim Speichern was schiefgeht, was zeigst du an?

Um rauszufinden ob sich was geändert hat, kann man einfach die Kopie mit dem Original vergleichen.
Wenn das Speichern fehlschlägt, kann man wieder das original Kopieren.

Wenn der User nicht Speichern will (Abbrechen), was machst du dann? Du musst es neu laden.
Mit der Kopie nicht nötig.

etc.

Das ganze kann man dan noch hübsch verpacken (als aufgebohrten Proxy) und dann kann man auch richtig hübsch dami arbeiten 🙂

Ja so ähnlich habe ich bis jetzt gemacht ein dirtyObjekt und ein normales Objekt und die immer mit EcoreUtils.equals miteinander verglichen...
Nicht speichern geht ja nur wenn du den Editor schließt also kannst auch das Objekt wegschmeißen 😉 und bei öffnen des neuen Editor kannst es neu laden.
 
Ecore gehört zu EMF oder? Damit müsst ich mich mal beschäftigen, das scheint ja echt gut zu sein. Besonders Wildcard schwärmt ja immer davon 🙂

Gibt so viel interessantes und man hat so wenig zeit...
 

Neue Themen


Zurück
Oben