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.