Synchronisation von 2 Datenbanken mit Hibernate

Hey

ich habe mal wieder ein Problem.

Ich versuche eine Methode zu entwickeln, die es ermöglicht meine lokale DerbyDB mit einer zentralen Postgres DB synchronisieren soll. Auf die lokale DerbyDB schreibt immer nur ein bestimmter Benutzer (offline), auf die zentrale mehrere (online).

Jeder Benutzer soll ermöglicht bekommen seine Daten auf die zentrale zu schreiben.

Soviel zum Hintergrund.

Mein Problem besteht jetzt darin:

Meine DerbyDB hat zwangsläufig irgendwann andere ID’s als die Postgres, da auf die Postgres ja meherere Leute schreiben.

D.h. ein einfaches Merge tuts da nicht mehr.

Mein ansatz sieht folgendermaßen aus:

public void synchronizeCustomer(){

try{
//Holt alle Kunden von der lokalen DB und liest sie in eine Arraylist ein
setListOfCustomerLocal(getListOfCustomerByUserLocal());

//holt alle Kunden vom Server und liest sie in eine Arraylist ein
setListOfCustomerServer(getListOfCustomerByUserServer());

//vergleiche vorhandene Listen miteinander ob das Object schon existiert
for(Kunden k : getListOfCustomerLocal()){

for (Kunden ks : getListOfCustomerServer()) {

//Ids auf den servern sind unterschiedlich daher auf bezeichnung prüfen (Firmenname des Kunden)
if (k.getBezeichnung().equals(ks.getBezeichnung())) {
//Wenn die Version des Objekts sich von der auf dem Server unterscheidet
if(k.getVersion() != ks.getVersion()){
//Hier kommt das Problem



Wie kann ich nun den EntityManager dazu bringen zu erkennen dass beide Objekte die gleichen sind und er das Objekt auf der Postgresdatenbank überschreiben soll?

Wenn ich einfach das Objekt aus der lokalen nehme und die ID, auf die vom Server, ändere legt er mir, je nach dem wie ich das mache, ein neues Objekt an, oder ich bekomme eine Optimistiklock - Exception.

Wenn ich ein neues Kundenobjekt erzeuge, die ID auf die ID des Objekts vom Server setze und die Werte zuweise, bekomme ich ein ganz neues Objekt mit einer komplett anderen ID. Ein neues Objekt wird also persistiert.

Wenn ich dem Objekt aus der Server Datenbank das Objekt aus der lokalen zuweise bekomme ich eine

org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [entity.Kunden#2867]

Wenn ich einfach nur das Lokale Objekt speichere bekomme ich ein ebenfalls ein komplett neues Objekt, logisch, die ID ist ja auch nicht vorhanden…

Vlt stehe ich auch gerade total auf dem Schlauch (vlt fehlt mir auch etwas das Verständnis von Hibernate) und die Lösung ist zum greifen nahe, aber ich komme einfach nicht drauf wie ich es lösen kann.

Ich hoffe ihr könnt mir auf die Sprünge helfen.

Grüße

DE