1

我正在使用带有休眠和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 字段始终为空,因此数据不会更新。这是我的控制器方法的样子:

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

我怀疑问题可能出在我的继承映射上,因为我有其他类继承自Person类,我也面临类似的问题。

请帮忙!

4

1 回答 1

2

你需要一个公共的 id 设置器。

在这种情况下,我通常为表单使用特定的 dto,和/或实现一个转换服务,该服务通过基于 id 的休眠检索实体,然后执行合并。

于 2013-03-28T13:32:14.117 回答