首先,有三个实体对象User,Student, Teacher
其中三者共同的属性是name,password,fullname,均定义在User中,Student和Teacher继承User
用每个类分层的方式进行mapping映射,只需要用到一个表userinfo就可以描述以上关系但需要增加一个user_type字段
< class table ="userinfo" name ="cn.hxex.exam.model.User" > < id name ="id" column ="ID" > < generator class ="uuid.hex" /> </ id > < property name ="name" column ="NAME" /> < property name ="password" column ="PASSWORD" /> < property name ="fullname" column ="FULLNAME" /> < subclass name ="cn.hxex.exam.model.Student" discriminator-value ="student" > < many-to-one column ="CLASS_ID" cascade ="save-update" name ="classes" /> < subclass > < subclass name ="cn.hxex.exam.model.Teacher“ discriminator-value=" teacher" > < set cascade ="all" lazy ="true" table ="TEACHER_CLASS" name ="classes" > < key column ="TEACHER_ID" /> < many-to-many class ="cn.hxex.exam.model.Classes" column ="CLASS_ID" /> </ set > < subclass > </ class >
当执行from User 时候,只需要执行select * from userinfo ,可以减少sql执行次数
当执行from Student ,hibernate会自动执行select * from userinfo where user_type="student";
同样,在进行对象持久话操作时,也会根据对象类型自动设置user_type字段值
