Spring MVC + Hibernate: для загрузки требуется id для загрузки

Это такой вопрос, я знаю, и извиняюсь. Я пытаюсь редактировать существующую запись с помощью метода Hibernates session.merge(), и я получаю следующую ошибку:

java.lang.IllegalArgumentException: id to load is required for loading

Это мой объект:

@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "TITLE_ID", unique = true, nullable = false)
private Integer titleId;

@NotNull
@NotBlank
@Column(name = "TITLE_DESCRIPTION", nullable = false, length = 10)
private String titleDescription;
// default constructor, getters & setters

Это метод уровня обслуживания:

 public void edit(Title title) {
     logger.debug("Editing existing title");

     // Retrieve session from Hibernate
     Session session = sessionFactory.getCurrentSession();

     // Retrieve existing title via id
     Title existingTitle = (Title) session.get(Title.class, title.getTitleId());

     // Assign updated values to this title
     existingTitle.setTitleDescription(title.getTitleDescription());

     // Save updates
     session.merge(existingTitle);
 }

Это метод POST для контроллера:

@RequestMapping(value="/edit", method = RequestMethod.POST)
public String postEditTitle(@Valid @ModelAttribute("titleAttribute") Title title,
                        BindingResult result) {

    logger.debug("Received request to edit title");

    if (result.hasErrors()) {
        return "editTitle";
    }
    else {
        titleService.edit(title);
        return "redirect:/essays/main/title";
    }
}

Что мне не хватает? Любая помощь будет высоко оценена.

Ответ 1

Проблема не в Hibernate. title.getTitleId() имеет значение null, когда вы передаете его на session.get(), и это проблема с вашим веб-сервисом/приложением.

  • Ваш GET может не предоставлять идентификатор в объекте модели
  • Ваш клиентский код (форма, клиентское приложение, ajax-вызов, что бы это ни было) может не сохранять идентификатор между GET и POST
  • Ваш POST может не предоставлять идентификатор в объекте модели.

Здесь вы можете предоставить более подробную информацию или задать новый вопрос, если у вас возникают трудности с сохранением атрибутов в Интернете, отдыхе или сеансе WS.