Lassen Sie uns sagen, ich habe die folgende Methode in einer Spring MVC @Controller
holen:Hibernate lazy-Ladeverhalten bei Sammlungen von Spring MVC @Controller
@RequestMapping(value = "/list")
public ModelAndView renderView(@PathVariable("id") int id, @ModelAttribute("someForm") SomeForm someForm) {
SomeEntity someEntity = someEntityService.findById(id);
someForm.setEntity(someEntity);
someForm.setLstFromEntity(
new ArrayList<SomeSubEntity>(someEntity.getSomeSubEntities())
);
return new ModelAndView("someView", "someForm", someForm);
}
someEntityService
ist eine @Transactional
@Service
und die Sammlung Ich holen es ist faul -geladen, so dass es sinnvoll ist, zu denken, dass das Holen fehlschlagen würde, weil keine Sitzung aktiv ist (ich bin mir nicht sicher, ob das wahr ist). Das Abrufen funktioniert jedoch perfekt.
Allerdings habe ich eine andere Methode als @RequestMapping(value = "/save")
annotiert, die einen Speichervorgang ausführt und renderView()
aufruft, um die Ansicht an den Client zurückzugeben. In diesem Fall gibt someEntity.findById(id)
die Entität zurück, ohne jedoch Select auf die Datenbank zu setzen. Alle Felder sind ausgefüllt, aber die Auflistung (PersistentBag) ist leer, daher ist die Entität unvollständig.
Mehr Fragen:
- Ist die Sitzung wirklich geschlossen?
- Woher kommt diese someEntity im zweiten Fall?
- Warum wird die Sammlung leer zurückgegeben?