Hibernate не может найти идентификатор при сохранении объекта Entity в базу данных - PullRequest
1 голос
/ 15 февраля 2011

Я добавляю объект команды типа Employee в ModelAndView в моем приложении spring-mvc + hibernate.JSP имеет простую форму, которая будет использоваться 2 способами.

1) Для создания новой учетной записи сотрудника

2) Для редактирования существующей учетной записи (здесь будет предварительно заполнена форма.)

В случае создания учетной записи,добавлен объект команды new Employee().Однако во втором случае я загружаю объект сотрудника из базы данных и передаю его как объект команды.Это заполняет форму без явного упоминания чего-либо еще.

Но при отправке отредактированной формы hibernate не может найти идентификатор, что вызывает исключение -

org.springframework.web.util.NestedServletException: Request processing failed; nested
exception is org.hibernate.TransientObjectException: The given object has a null     
identifier: org.kodeplay.springroll.model.Employee

Метод контроллера, сопоставленный с этим действием формы, это

@RequestMapping(value="/update.htm", method = RequestMethod.POST)
public ModelAndView update(@ModelAttribute("employee") Employee employee, 
          BindingResult result) {
        Map<String, String> errors = employeeService.validationErrors(employee);
        if(errors.isEmpty()) {
            //success
            employeeService.editEmployee(employee);
            ModelAndView mav = this.displayList();
            mav.addObject("success", "Employee Updated Successfully");
            return mav;
        }

        else {
            //show form again with errors
            ModelAndView mav = this.displayForm(employee);
            mav.addObject("errors", errors);            
            return mav;
        }       
    }

private ModelAndView displayForm(Employee employee) {
        ModelAndView mav = new ModelAndView("employee/form");       

        if(employee == null){           
            mav.addObject("command", new Employee());
        }

        else {
            mav.addObject("command", employee);
        }

        return mav;     
    }

Является ли аннотированный параметр @ModelAttribute в пружинном контроллере mvc не фактическим переданным объектом команды, а новым объектом того же типа, что и объект команды?Это нормальное поведение, или я что-то упускаю?

И как можно этого добиться?Передача идентификатора в качестве скрытой формы ввода?

Спасибо

1 Ответ

0 голосов
/ 15 февраля 2011

При добавлении объекта команды вы должны указать имя сотрудника вместо команды, то есть имя ModelAttribute.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...