JPA - Doppelte Persistenz (Synchronisation)

E

eneR

Gast
Hallo,
ich habe einen Objektbestand, der lokal mit der JPA (Java Persistence API) persistent gemacht wird. Dabei wird eine lokale Datenbank-ID (
Code:
lokaleID
) für jedes Objekt erstellt.

Java:
@Entity
public class Test {
        @Id
        @GeneratedValue
        private Long lokaleID;
        private Long globaleID;

        //other stuff//getter/setter/Methods
}

Sobald eine bestimmte Netzwerkfestplatte angeschlossen wird (bzw sich im Netzwerk befindet) sollen diese Daten auch in eine Datenbank auf dieser geschrieben werden. Hierbei soll die
Code:
globaleID
generiert werden (die sich von der
Code:
lokaleID
unterscheiden kann - und die
Code:
lokaleID
muss natürlich nicht mit gespeichert werden).

Wie macht man das in einem etwas größeren System sauber?

Der globale "Übertrag" ließe sich natürlich "manuell" machen, aber da gehen einem ja leider die ganzen Vorteile von JPA verloren. Eine weitere Möglichkeit wäre, das mit einem "lokalen" und einem "globalen" Objektbestand zu lösen (der nicht die
Code:
lokaleID
hat und
Code:
@Id
sowie
Code:
@GeneratedValue
bei der
Code:
globaleID
hat, ansonsten gleich), bleibt jedoch das Problem, woher weiß man, wann die
Code:
globaleID
generiert wurde (so dass man sie übertragen kann).
Und wie ist es mit dem Problem, dass die Datenbank jederzeit getrennt werden kann?

Falls da irgendjemand Ideen hat: Immer her damit :D

Gruß,
eneR
 

TheDarkRose

Gesperrter Benutzer
Sowas solltest du eigentlich auf Datenbankebene regeln. Also der lokale DB-Server sich selbst wohin spiegelt oder so. Was ist eigentlich der Sinn und Zweck des ganzen? Backup?
 
E

eneR

Gast
Es geht um ein Versionisierungs-, Backup- und Synchronisierungsprogramm in einem.

Eine Lösung, die mir jetzt eingefallen ist, ist folgende:
- Lokal angelegtes Objekt.
- JPA persistiert automatisch die Daten in der lokalen Datenbank
- Wenn Festplatte verbunden: Übertrag aller Elemente mit der
Code:
globalID==0
("manuell" auf Datenbankebene)
- Die generierte
Code:
globalID
wird per
Code:
Objekt.setGlobalID(...)
gesetzt.
- JPA persistiert automatisch die
Code:
globalID
in der lokalen Datenbank

Würde funktionieren - und ich glaube, die wäre gar nicht so schlecht.
Was haltet ihr von der Lösung?
 

oopexpert

Mitglied
Ich weiss nicht, inwiefern dass hier tatsächlich anwendbar ist. Aber wäre das nicht ein Fall für UUIDs anstatt zwischen globaler Id und lokaler Id zu unterscheiden?
 

Ähnliche Java Themen


Oben