控制器中的ID字段为空

时间:2013-03-28 13:24:01

标签: spring hibernate spring-mvc

我正在使用带有hibernate和JPA的spring mvc。我有一个 Person 类,它由另一个名为 Agent 的类继承。映射实现如下:

@Entity
@Table(name = "Person")
@Inheritance(strategy = InheritanceType.JOINED)
public class Person extends Auditable implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "PersonId")
    protected Long id;

    //other variables
    ...
}


@Entity
@PrimaryKeyJoinColumn(name = "PersonId")
public class Agent extends Person implements Serializable {
    //additional agent specific variables go here 
    ...
}

保存新数据非常顺利,我没有问题。但是,当我编辑数据时,除了id值之外的所有内容都绑定到控制器方法的模型属性。我已经使用chrome的开发人员工具验证了该ID已与浏览器中的其他项一起发送。但控制器上的id字段始终为null,因此数据不会更新。这就是我的控制器方法:

@RequestMapping(value = "register", method = RequestMethod.POST)
public @ResponseBody CustomAjaxResponse saveAgent(ModelMap model, @ModelAttribute("agent") @Valid Agent agent, BindingResult result) {
    ...
}

我怀疑问题可能在于我的继承映射,因为我有其他类继承自 Person 类,我也遇到了类似的问题。

请帮忙!

1 个答案:

答案 0 :(得分:2)

你需要一个id的公共setter。

在这种情况下,我通常使用特定的dto表单,和/或实现一个conversion service,它通过基于id的hibernate检索实体,然后执行合并。