Hibernate中类的继承联合使用subclass和join
类和表的关系:
单独使用<subclass/>元素的类会和父类在同一张表里;
使用<subclass><join></join></subclass>这两个元素的类会单独占一个表。
*************
Employee.java
*************
skill
插入语句:
Sale
Hibernate: insert into employees (EMPLOYEE_NAME, SELL, type) values (?, ?, 1)
Skill
Hibernate: insert into employees (EMPLOYEE_NAME, type) values (?, 2)
Hibernate: insert into skill (SKILLER, id) values (?, ?)
Employee
Hibernate: insert into employees (EMPLOYEE_NAME, type) values (?, 0)
查询语句:
Hibernate:
select
sale0_.EMPLOYEE_ID as EMPLOYEE1_0_0_,
sale0_.EMPLOYEE_NAME as EMPLOYEE3_0_0_,
sale0_.SELL as SELL0_0_
from employees sale0_
where sale0_.EMPLOYEE_ID=? and sale0_.type=1
Hibernate:
select skill0_.EMPLOYEE_ID as EMPLOYEE1_0_0_,
skill0_.EMPLOYEE_NAME as EMPLOYEE3_0_0_,
skill0_1_.SKILLER as SKILLER1_0_
from employees skill0_
inner join skill skill0_1_
on skill0_.EMPLOYEE_ID=skill0_1_.id
where skill0_.EMPLOYEE_ID=? and skill0_.type=2
Hibernate:
select employee0_.EMPLOYEE_ID as EMPLOYEE1_0_0_,
employee0_.EMPLOYEE_NAME as EMPLOYEE3_0_0_,
employee0_.SELL as SELL0_0_,
employee0_1_.SKILLER as SKILLER1_0_,
employee0_.type as type0_0_
from employees employee0_
left outer join skill employee0_1_
on employee0_.EMPLOYEE_ID=employee0_1_.id
where employee0_.EMPLOYEE_ID=?
查询结果:
Sale{id=1, name=sunliu, sell=300000}
Skill{id=2, name=wangwu, skiller=java}Employee{id=3, name=lisi}
PS:这样联合使用subclass和join的好处是结合了单独使用subclass的高效率和joined-subclass的对于关系模型的理念。如果类的属性比较多则用join,如果属性少则直接用subclass即可(指用本案例的模型)。