Я занимаюсь разработкой веб-приложения на основе Hibernate, Spring и Wicket.
До сих пор я реализовывал бизнес-объекты и слой постоянства. Транзакция управляется перехватчиком транзакции среды Spring. Таким образом, каждый метод классов DAO заключен в транзакцию. Реализация этого вместе с модульным тестом была простой.
Теперь я перехожу к части веб-приложения, где я также использую Spring для внедрения зависимостей. Вместе с аннотациями @SpringBean платформы Wicket я внедряю DAO в компоненты Wicket. Но так как я довольно новичок в Wicket, я немного застрял, когда использую подходящую модель для своих бизнес-объектов, когда передаю их компонентам Wicket.
Я пробовал LoadableDetachableModel, но столкнулся с некоторыми проблемами. Я получил одну страницу, чтобы создать новый или отредактировать существующий бизнес-объект в зависимости от входных параметров страницы. Если в параметрах есть идентификатор, то соответствующий бизнес-объект должен быть загружен из базы данных. При отсутствии параметров следует создать новый бизнес-объект. Часть, в которой объект должен быть отредактирован, работает довольно хорошо, но когда должен быть создан новый объект, и я заполняю веб-форму и нажимаю сохранить, я получаю исключение NullPointerException. После некоторой отладки я обнаружил, что LoadableDetachableModel не может вернуть экземпляр бизнес-объекта, так как переопределенный метод load () не может загрузить объект из базы данных, поскольку он еще не был сохранен и поэтому не имеет идентификатора.
Так что теперь мне интересно, как решить эту проблему. Является ли LoadableDetachableModel правильным выбором? Целесообразно ли разделить форму на две взаимозависимые формы, и каждая форма использует свою модель. Таким образом, только страница редактирования / форма использует LoadableDetachableModel?