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