Ich verwende Play Framework und habe ein, wie ich glaube, sehr häufiges Persistenzproblem:
- Ich zeige ein Formular mit Werten aus der Datenbank und einem Feld "Menge" an.
- Der Benutzer aktualisiert das Formular und ändert den Wert der "Menge".
- Er klickt auf die Schaltfläche "Speichern".
- In der aufgerufenen Controller-Methode möchte ich den alten Wert der "Menge" abrufen und die Differenz zwischen dem neuen und dem alten Wert berechnen, bevor ich die DB aktualisiere
- Um das zu machen, verwende ich findById (vor dem Aufruf der object.save-Methode), aber es gibt mir den neuen Wert, nicht den alten: es sieht anscheinend in irgendeinem Cache (welcher?), anstatt die DB abzufragen
\=> Ist das normal? Wie kann ich den alten Wert ermitteln, meine Berechnung durchführen und dann beibehalten?
Vielen Dank für Ihre Hilfe, ich möchte keine alten/neuen Werte in meiner DB verwalten...ich bin mir sicher, dass das eine schlechte Praxis ist!
アップデイト
public static void save(@Valid Lot lot) {
History element = new History();
element.date = new Date();
//HERE below it returns the new value, not the old one
Lot databaseLot = Lot.findById(lot.id);
element.delta= databaseLot.quantity - lot.quantity;
element.save();
lot.save();
list(null, null, null, null);
}
0 Stimmen
Können Sie den Code des Controllers angeben? Es ist schwer zu erraten, was da passiert. Ich würde vermuten, dass es ein Bindungsproblem ist.