Кажется, что может быть некоторая путаница в именах ваших объектов. Командные объекты обычно предоставляют один метод execute () (с параметрами), который работает с данным объектом или доменным объектом для изменения его состояния в соответствии с бизнес-логикой. Это очень аккуратный способ инкапсуляции бизнес-логики в простые объекты, которые имеют очень ограниченную область видимости для изменения других объектов.
Может показаться, что проект, с которым вы работаете, фактически выполняет своего рода мост между объектами передачи данных (DTO или объектами) и объектами значений (объектами VO или объектами Command в вашей системе). Это может быть довольно расточительным, поскольку все, что вы делаете, это копируете одни и те же данные в разные объекты.
Объект доступа к данным (DAO), действующий по шаблону объекта передачи данных (DTO или объект), хорошо известен и обеспечивает хорошее разделение между уровнями. Как правило, Hibernate сопоставляет сущности с базой данных и лениво загружает коллекции в них. Это - то, где большинство проектов срабатывают, потому что они не учитывают правильную инициализацию коллекций, потому что сеанс прошел, как только поток выполнения покидает DAO. Я предполагаю, что «Объекты команд» в JSP на самом деле являются подмножествами сущностей с различными коллекциями, инициализированными с помощью запросов Hibernate.
Я бы посоветовал вам отказаться от «командных объектов» в пользу соответствующим образом инициализированных объектов, которые упростили бы ваш дизайн в одном отношении, но открыли бы вас для потенциальной проблемы в другом. Вам нужно будет тщательно контролировать, как ваши JSP ссылаются на коллекции и инициализируют их. Возможно, вам придется заглянуть в шаблон Open Session In View, чтобы убедиться, что объект Hibernate Session доступен, когда JSP вызывает метод getCollection () для некоторого DTO, который не был инициализирован.