栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

休眠:单表中的父/子关系

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

休眠:单表中的父/子关系

您在这里表达两个概念:

  1. 继承,并且您想要在单个表中映射继承层次结构。
  2. 父母/子女关系。

要实现1.,您需要使用每个类层次结构策略的Hibernate
单个表:

@Entity@Inheritance(strategy=InheritanceType.SINGLE_TABLE)@DiscriminatorColumn(    name="emptype",    discriminatorType=DiscriminatorType.STRING)public abstract class Employee { ... }@Entity@DiscriminatorValue("MGR")public class Manager extends Employee { ... }

要实现2.,您需要在上添加两个自引用关联

Employee

  • 许多员工有零个或一个经理(也是
    Employee
  • 一名员工的报告人为零或很多

结果

Employee
可能如下所示:

@Entity@Inheritance(strategy=InheritanceType.SINGLE_TABLE)@DiscriminatorColumn(    name="emptype",    discriminatorType=DiscriminatorType.STRING)public abstract class Employee {    ...    private Employee manager;    private Set<Employee> reportees = new HashSet<Employee>();    @ManyToOne(optional = true)    public Employee getManager() {        return manager;    }    @oneToMany    public Set<Employee> getReportees() {        return reportees;    }    ...}

这将导致下表:

CREATE TABLE EMPLOYEE_EMPLOYEE (        EMPLOYEE_ID BIGINT NOT NULL,        REPORTEES_ID BIGINT NOT NULL    );CREATE TABLE EMPLOYEE (        EMPTYPE VARCHAr(31) NOT NULL,        ID BIGINT NOT NULL,        NAME VARCHAr(255),        MANAGER_ID BIGINT    );ALTER TABLE EMPLOYEE ADD ConSTRAINT SQL100311183749050 PRIMARY KEY (ID);ALTER TABLE EMPLOYEE_EMPLOYEE ADD ConSTRAINT SQL100311183356150 PRIMARY KEY (EMPLOYEE_ID, REPORTEES_ID);ALTER TABLE EMPLOYEE ADD ConSTRAINT FK4AFD4ACE7887BF92 FOREIGN KEY (MANAGER_ID)    REFERENCES EMPLOYEE (ID);ALTER TABLE EMPLOYEE_EMPLOYEE ADD ConSTRAINT FKDFD1791F25AA2BE0 FOREIGN KEY (REPORTEES_ID)    REFERENCES EMPLOYEE (ID);ALTER TABLE EMPLOYEE_EMPLOYEE ADD ConSTRAINT FKDFD1791F1A4AFCF1 FOREIGN KEY (EMPLOYEE_ID)    REFERENCES EMPLOYEE (ID);


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/406177.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号