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.
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:
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
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;
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);
}
Vielen Dank für eure Antworten!
Sven