Wenn ich eine Testmethode als @Transactional markiert habe und eine Entity zu einem beliebigen Zeitpunkt in der DB speichere, sollte ich die neuen Sachen abrufen können (mit Änderungen) in der nächsten Codezeile, auch wenn die Transaktion dann zurückgesetzt wird (das Standardverhalten von Transaktionseinheitstests), richtig?Sicherstellen, dass die Hibernate-Persistenz an einem Junit-Test arbeitete
Mit anderen Worten, wenn ich folgendes:
thisPhoto.likes.add(thisUser);
thisPhoto.save(); //the hibernate session will save this instance
...
thisUser = User.get(thisUser.id) // I even take the user instance again
newPhoto = thisUser.likedPhotos.get(0); //this should already contain the new photo, right?
assertEqual(newPhoto, thisPhoto);
Stellen Sie sich das Foto und Benutzer sind beide Hibernate basierte Einheiten, wo alle Beziehungen richtig eingestellt sind und alles.
Dennoch, als ich die letzte Zeile des Codes zu erreichen, erhalte ich eine Ausnahme, dass die likedPhotos Sammlung Größe von 0, und es gibt kein Element bei Index 0.
Warum? Wie soll ich sonst testen, dass die Entität richtig erhalten wurde?
eigentlich will ich nicht einmal, dass es die DB erreicht. Ich vertraue Hibernate dafür. Was ich tatsächlich erwartet habe, wäre, dass ich bei der Suche nach der (bereits aktualisierten) Entität die aktuelle Sitzung mir eine aktualisierte gegeben hätte, auch wenn die Änderungen noch nicht in der DB gespeichert wurden. Ich glaube, ich liege etwas falsch, oder? – preslavrachev
tatsächlich, auch manuell die Sitzung entleeren und dann das Objekt neu zu laden gibt keine aktualisierte :( – preslavrachev
verwenden Sie mysql? Haben Sie die Autocommit auf? – hvgotcodes