我正在使用带有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 类,我也遇到了类似的问题。
请帮忙!
答案 0 :(得分:2)
你需要一个id的公共setter。
在这种情况下,我通常使用特定的dto表单,和/或实现一个conversion service,它通过基于id的hibernate检索实体,然后执行合并。