首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Hibernate中种的继承联合使用subclass和join

2012-09-06 
Hibernate中类的继承联合使用subclass和join类和表的关系:单独使用subclass/元素的类会和父类在同一张表

Hibernate中类的继承联合使用subclass和join

类和表的关系:

单独使用<subclass/>元素的类会和父类在同一张表里;

使用<subclass><join></join></subclass>这两个元素的类会单独占一个表。


*************

Employee.java

*************


skill

Hibernate中种的继承联合使用subclass和join


插入语句:

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即可(指用本案例的模型)。

热点排行