JAVA认证:教你精通Hibernate之映射继续关系(2)
把每个具体类映射到一张表是最简单的映射体例。如图14-2所示,在关系数据模子中只需界说COMPANIES、HOURLY_EMPLOYEES和SALARIED_EMPLOYEES表。为了论说的便利,下文把HOURLY_EMPLOYEES表简称为HE表,把SALARIED_EMPLOYEES表简称为SE表。HourlyEmployee类和HE表对应,HourlyEmployee类自己的rate属性,以及年夜Employee类中继续的id属性和name属性,在HE表中都有对应的字段。此外,HourlyEmployee类继续了Employee类与Company类的联系关系关系,与此对应,在HE表中界说了参照COMPANIES表的COMPANY_ID外键。
SalariedEmployee类和SE表对应,SalariedEmployee类自己的salary属性,以及年夜Employee类中继续的id属性和name属性,在SE表中都有对应的字段。此外,SalariedEmployee类继续了Employee类与Company类的联系关系关系,与此对应,在SE表中界说了参照COMPANIES表的COMPANY_ID外键。
Company类、HourlyEmployee类和SalariedEmployee类都有响应的映射文件,而Employee类没有响应的映射文件。图14-3显示了持久化类、映射文件和数据库表之间的对应关系。
假如Employee类不是抽象类,即Employee类自己也能被实例化,那么还需要为Employee类建树对应的EMPLOYEES表,此时HE表和SE表的结构仍然和图14-2中所示的一样。这意味着在EMPLOYEES表、HE表和SE表中都界说了不异的NAME字段以及参照COMPANIES表的外键COMPANY_ID.此外,还需为Employee类建树零丁的Employee.hbm.xml文件。
14.1.1 建树映射文件
年夜Company类到Employee类是多态联系关系,可是因为关系数据耐庞慊有描述Employee类和它的两个子类的继续关系,是以无法映射Company类的employees集结。例程14-1是Company.hbm.xml文件的代码,该文件仅仅映射了Company类的id和name属性。
例程14-1 Company.hbm.xml
HourlyEmployee.hbm.xml文件用于把HourlyEmployee类映射到HE表,在这个映射文件中,除了需要映射HourlyEmployee类自己的rate属性,还需要映射年夜Employee类中继续的name属性,此外还要映射年夜Employee类中继续的与Company类的联系关系关系。例程14-2是HourlyEmployee.hbm.xml文件的代码。
例程14-2 HourlyEmployee.hbm.xml
SalariedEmployee.hbm.xml文件用于把SalariedEmployee类映射到SE表,在这个映射文件中,除了需要映射SalariedEmployee类自己的salary属性,还需要映射年夜Employee类中继续的name属性,此外还要映射年夜Employee类中继续的与Company类的联系关系关系。例程14-3是SalariedEmployee.hbm.xml文件的代码。
页:
[1]