Ich benutze 2.5 und mache alles über Anmerkungen.Spring MVC @SessionAttributes Verwirrung!
Ich habe ein einfaches Formular, mit dem der Benutzer ein Objekt bearbeiten kann. Der dahinter stehende Controller erstellt das Objekt und fügt es dem Modell in GET hinzu und verarbeitet die Änderungen beim POST (submit). Es funktioniert gut, aber ich verstehe nicht warum. Das Objekt wird der Sitzung nie explizit hinzugefügt, und die "ID" des Objekts wird nicht an die Methode submit übergeben. Wie kennt die Submit-Methode des Controllers den "id" -Wert des Objekts?
Der Grund, warum diese Frage kam, ist, dass ich ein anderes Formular/Controller habe, der fast identisch mit dem obigen ist, aber nicht funktioniert, wenn ich das Objekt @SessionAttributes hinzufügen. Der Unterschied ist, dass das Objekt, mit dem dieser spezielle Controller arbeitet, einen Verweis auf ein anderes Objekt hat, das faul geladen ist (ich benutze Hibernate im Hintergrund). Wenn ich das Formular absende, ohne das übergeordnete Objekt in SessionAttributes zu versetzen, erhalte ich eine DataIntegrityViolationException, weil ich das referenzierte Objekt nie lade.
Wenn ich das Elternobjekt zu @SessionAttributes hinzufüge, verschwindet das Problem magisch. Ich sage magisch, denn obwohl ich das Elternobjekt in die Sitzung von GET gelegt habe, habe ich das Objekt, auf das verwiesen wird, immer noch nicht explizit geladen, also sollte es null sein (oder ein leerer Proxy oder was auch immer passiert).
Was in der Welt ist los? Ich brauche Hilfe!