Java 在Spring MVC/Hibernate中如何处理CRUD的1:N外键?

Java 在Spring MVC/Hibernate中如何处理CRUD的1:N外键?,java,spring,hibernate,spring-mvc,web,Java,Spring,Hibernate,Spring Mvc,Web,我正在尝试为CRUD web应用程序创建一个“更新”表单。与我的问题相关的类在MySQL数据库中以1:N的方式进行关联 我很难找到将department参数强制转换为正确类型的优雅解决方案。我可以用表单的jsp构建一个难看的解决方案,但我想知道标准的SpringMVC/Hibernate解决方案是什么 我有以下Hibernate实体类,Employee和Department,使用以下代码实现: @Entity @Table(name="employee") public class Employ

我正在尝试为CRUD web应用程序创建一个“更新”表单。与我的问题相关的类在MySQL数据库中以1:N的方式进行关联

我很难找到将department参数强制转换为正确类型的优雅解决方案。我可以用表单的jsp构建一个难看的解决方案,但我想知道标准的SpringMVC/Hibernate解决方案是什么

我有以下Hibernate实体类,EmployeeDepartment,使用以下代码实现:

@Entity
@Table(name="employee")
public class Employee {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="id")
    private int id;

    @JoinColumn(name = "ID_DEPT", referencedColumnName = "ID_DEPT")
    @ManyToOne(optional = false)
    private Department deptId;
 ...
}
更新通过jsp文件中的post请求执行,如下所示:

有关员工的相关代码为:

@Override
public void saveEmployee(Employee theEmployee) {
    Session currentSession = sessionFactory.getCurrentSession();
    currentSession.saveOrUpdate(theEmployee);
}

我应该在哪里以及如何正确处理post参数?

我认为您可能误解了对连接实体的理解,因为java存储了实体的引用。当您更新它时,您必须在hibernate中找到它和引用

看看这个例子,我希望它能帮助您:


实际需要更改的只是jsp更新表单中的这一行:

在这种情况下,正确的路径应该是
path=deptId.deptId
。这将调用部门类的适当构造函数,该类反过来实例化一个部门对象,该对象将保存为包含该部门的员工对象的一部分

可惜这么好的功能却有这么差的文档。一个春意盎然的人很容易感到不知所措。我包含这一段的唯一原因是,可能有人会评论指向正确Spring文档的链接,因为我找不到任何适合我需要的链接


如果我的解决方案不正确,请有人纠正,但到目前为止,我已经用表单尝试了创建和更新操作,效果很好。

您看到它发布到控制器的数据了吗?i、 例如,deptId在您的post controller中的值是多少?
@PostMapping("/saveEmployee")
public String saveDisciplina(@ModelAttribute("employee") Disciplina theDisciplina) {
    return "redirect:/employee/list";
}
@Override
public void saveEmployee(Employee theEmployee) {
    Session currentSession = sessionFactory.getCurrentSession();
    currentSession.saveOrUpdate(theEmployee);
}