JPA "Sperren" von Datensätzen (Richtiger Lösungsansatz?)

sven-meye

Mitglied
Hallo zusammen,

ich habe bereits ein wenig Erfahrung mit JPA. Nun arbeite ich wieder an einer Software für eine kleine Firma. Dabei handelt es sich um eine kleine Fakturierungssoftware (Leistungserfassung). Nun gibt es eine Entität "Leistung", welche verrechnet bzw. fakturiert wird. Wenn dies der Fall ist, darf keine Änderung mehr an den Attributen der Entität stattfinden! Das Attribut "fakturierungsdatum" hat den Wert null oder das Datum an dem die Leistung verrechnet wurde.
Java:
@Temporal(value = TemporalType.DATE)
private LocalDate fakturierungsdatum;
Ist dieses Datum gesetzt, soll keine Änderung mehr erlaubt sein. Jetzt habe ich mich gefragt, was die Beste Variante ist, um Änderungen zu verhindern. Soweit ich bis jetzt herausgefunden habe, ist das "Locken" von JPA ja nicht wirklich eine dauerhafte Lösung. Darum habe ich mir überlegt in die Setter-Methoden folgenden Code einzufügen:
Java:
public void setTotal(Double total) throws NoChangesAllowedException {
    if(isFakturiert()) throw new NoChangesAllowedException(ResourceBundleFactory.getResourceBundle().getString("exception.illegalAccess.message"));

private boolean isFakturiert() {
    return (fakturierungsdatum != null);
}
Allerdings zweifle ich daran, dass das eine "schöne" Lösung ist. Wie könnte man das besser lösen? Ich hatte mir überlegt, eine Abfrage bei Verarbeiten der Daten auf der Oberfläche zu machen, allerdings ist dies fehleranfällig, denn geht die Abfrage vergessen, können trotzdem Änderungen vorgenommen werden. Darum muss ja fast direkt auf der Entität validiert werden, um Fehler zu vermeiden, sehe ich das richtig?

Vielen Dank für eure Antworten!
Sven
 

mrBrown

Super-Moderator
Mitarbeiter
Ich würde die Validierung immer zusätzlich auch in der Entity selber machen.

Die Daten können dann natürlich noch direkt über die DB verändert werden, ich weiß aber ehrlich gesagt auch nicht, ob irgendeine DB da Möglichkeiten bietet, Datensätze immutable zu machen.
 

Neue Themen


Oben