Projekt play Rahmen 1.3.3 verwendet Ich habe einen solchen Controller:play Rahmen 1.3.3 und Hibernate Cache
public static void save(Item item) {
if (item.id != null) { //It means that item is not new, it is being edited
Item existingOldItem = Item.findById(item.id);
//Here I should have an old version of an item as "existingOldItem"
//and new one coming from http request as "item"
}
Aber das Problem ist Gegenstand und existingOldItem sind sehr identisch. Die Item.findById-Zeile gibt mir kein altes Element aus der Datenbank zurück, sondern gibt das neue Element aus der http-Anforderung zurück (dasselbe mit JPA.em(). CreateQuery). Ich nehme an, dass Play Framework ein neues Element in einem Cache sendet, und findById gibt das Element aus dem Cache zurück, nicht aus einer Datenbank. Könnte mir bitte jemand die Logik erklären, die dahinter steckt und wie man das Problem lösen kann.
Danke! Ist es ein normales Verhalten eines Web-Frameworks mit JPA oder ist es nur ein Spiel? Ding? –
Das ist Spielen! Spezifisch. Wenn andere Web-Frameworks dasselbe tun, ist es Zufall. Ich würde mich wundern, wenn ein anderes Framework dies tut, weil item.save() ein Play ist! Erfindung und nicht, wie JPA-Entitäten normalerweise arbeiten. Wenn ein anderes Framework das JPA-Objekt im Speicher änderte, löschte Hibernate möglicherweise die Änderungen an der Datenbank, ohne der Anwendungslogik die Möglichkeit zu geben, sie zurückzuweisen. In Play! Muss die Anwendungslogik jedoch save() aufrufen, damit die Änderungen gelöscht werden. –