在Hibernate&中设置/获取外键Java的

时间:2012-03-26 08:21:23

标签: java hibernate struts2 foreign-keys

非常确定这是微不足道的,但无法找到直接的答案。我有Dept / Emp表。 emp表中的dept_id是外键。这是一种经典的一对多关系。在Web应用程序中,在新员工页面上,dept是一个列出可用depts的Select控件。当用户提交页面时,我有Emp详细信息和部门ID。但是我不能在Emp类上设置Dept id,因为在Emp类中没有setter或getter to Dept id!

处理此问题的最佳方法是什么?

我正在使用Struts2 2.1.8 / hibernate 3.x / tomcat 6.0.26 / MySQL 5.5.x

4 个答案:

答案 0 :(得分:0)

你应该在部门中设置一套Emp。并且如果一个emp可以存在于一个部门中,那么emp中将有多个部门,但是如果一个emp可以存在多于一个部门而不是你需要在Emp的部门。

请参考如何定义collection mapping in hibernate

答案 1 :(得分:0)

您可以在服务层

中执行
service.add(employee, id);
Service.add(Employee employee, String id)

中的

public void add(Employee employee, String id) {
    Department department = session.get(Department.class, id);
    employee.setDepartment(department);
    session.persist(employee);
}

但您需要在Employee课程中设置setter来设置员工的Department

答案 2 :(得分:0)

你有两个部门,即之前属于Emp的旧部门,以及用户选择Emp所属的新部门。两个部门中的每一个都有一套所有属于他们的雇员。

在一个事务中,您从旧部门中的雇员集合中删除Emp,将其添加到新部门中的雇员集合中,并使用session.update(Dept)更新这两个部门。如果你没有雇员的级联,你也必须更新Emp。

这看起来更复杂,但是这样两个部门中的雇员集合仍然是正确的,而在数据库方面,这应该只导致一个SQL语句。

答案 3 :(得分:0)

从我从这个问题中收集到的是你可能没有正确配置你的bean。您必须在bean中定义ORM映射,如下所示:

@Entity
@Table(name = "EmployeeMaster")
public class empBean {

@Column(name = "Name", nullable = false)
private String name;

@Column(name = "departmentFkId", insertable = true, updatable = true)
private Long departmentFkId;

@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name = "departmentFkId", insertable = false, updatable = false)
private DepartmentMasterBean department;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}
public DepartmentMasterBean getDepartment() {
    return department;
}

public void setDepartment(DepartmentMasterBean department) {
    this.department = department;
}

public Long getDepartmentFkId() {
    return departmentFkId;
}

public void setDepartmentFkId(Long departmentFkId) {
    this.departmentFkId = departmentFkId;
}
}

现在您可以设置部门详细信息(empBean.setDepartmentFkId),hibernate将通过会话(session.saveOrUpdate(empBean))处理其余的保存。

相关问题