2010-03-27 86 views
3

我有一个包含引用相同表的主键和外键的表。 我如何能实现在休眠这个映射表...的 结构如下..Hibernate中同一个表内的一对多映射

Dept (
    deptno pk, 
    dname, 
    location 
) 

employee (
    empid pk, 
    ename, 
    Manager Id Foregin key references Employee(empid), 
    deptno Foregin key references dept(deptno), 
    doj date, 
) 
+0

@pascal先生,请给予答复.. – saurabh 2010-03-27 12:27:10

+0

你尝试过什么? 将一对多映射到自身而不是任何其他实体并没有特别的区别。 – 2010-03-27 12:28:03

+0

@ donoroby你可以请提供上面的表格映射文件.. 其实我不知道如何映射它.... – saurabh 2010-03-27 12:33:43

回答

6

如果关系是双向的,你可以有这样的事情:

@Entity 
public class Employee implements Serializable { 
    private Long empid; 
    private String ename; 
    private Employee manager; 
    private Set<Employee> employees = new HashSet<Employee>(); 
    private Dept deptno; 
    private Date doj; 

    @Id 
    @GeneratedValue 
    public Long getEmpid() { 
     return empid; 
    } 

    public void setEmpid(Long empid) { 
     this.empid = empid; 
    } 

    @ManyToOne 
    public Employee getManager() { 
     return manager; 
    } 

    public void setManager(Employee manager) { 
     this.manager = manager; 
    } 

    @OneToMany(mappedBy = "manager") 
    public Set<Employee> getEmployees() { 
     return employees; 
    } 

    public void setEmployees(Set<Employee> employees) { 
     this.employees = employees; 
    } 

    @ManyToOne 
    public Dept getDeptno() { 
     return deptno; 
    } 

    public void setDeptno(Dept deptno) { 
     this.deptno = deptno; 
    } 

    // ... 
} 

没什么特别对于Dept

@Entity 
public class Dept implements Serializable { 
    private Long deptno; 
    private String dname; 
    private String location; 

    @Id 
    @GeneratedValue 
    public Long getDeptno() { 
     return deptno; 
    } 

    public void setDeptno(Long deptno) { 
     this.deptno = deptno; 
    } 

    // ... 
} 
+0

thanx先生为你的回应.. – saurabh 2010-03-28 18:05:11