Spring MVC + Hibernate:加载时需要加载id

时间:2014-02-02 01:19:08

标签: hibernate spring-mvc

这是一个非常棒的问题,我知道,我道歉。我正在尝试使用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 个答案:

答案 0 :(得分:15)

问题不在于Hibernate。将title.getTitleId()传递给session.get()时,{{1}}为空,这是您的网络服务/应用程序的问题。

  1. 您的GET可能未在模型对象中提供ID
  2. 您的客户端代码(表单,客户端应用,ajax调用,无论是什么)可能不会在GET和POST之间保留ID
  3. 你的POST可能没有在模型对象中提供id。
  4. 如果您在通过网络,休息或WS会话保留属性方面遇到困难,可以在此处提供更多详细信息或提出新问题。