java - Hibernate 中同一个表中的一对多映射

标签 java hibernate orm

我有一个包含引用同一个表的主键和外键的表。 我怎样才能在 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,
)

最佳答案

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

@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;
    }

    // ...
}

关于java - Hibernate 中同一个表中的一对多映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2529200/

相关文章:

mysql - 第 1 行第 'column name' 列的数据被截断

java - 如何处理 hibernate 映射列错误?

.NET - ORM 和所有可能的组合 - ViewModel?

java - JPA orm.xml 支持数据库索引

java - 使用@Assisted 注入(inject)多个相同类型的参数(@Named 参数)

java - 检查明确的许可?

java - Math.E 和 e 有什么区别

java - 创建自定义 JPA 时间注释

php - Doctrine2,传递 Id 还是对象?

java - 为什么 JUnit "Run as->JUnit"和 "Cover as -> Junit"有不同的行为?