夜光序言:
我的心不是24小时营业的餐厅 没有随时的欢迎光临
正文:
复杂继承映射
方式1:整个继承结构一张表
特点:
所有的子类都写到一个映射文件中
用一张表存储所有的子类信息
<subclass name="Cat" discriminator-value="cat_"> <property name="catching"></property> </subclass> |
总结:
生成的表,不符合数据库设计原则
因为所有子类都用一张表存储,存在很大的冗余字段
方式2:三张表
特点:
完全按照面向对象设计表结构
<joined-subclass name="Cat" table="t_cat"> <key column="id"></key> <property name="catching"></property> </joined-subclass> |
总结:
设计的表,是符合数据库设计原则(三大范式)
但是,表结构、关系变得负责,影响数据访问效率
方式3:每个子类用一张表
特点:
一个映射文件
有多少个子类对应多少个表,父类不对应表
<!-- 夜光:注意:使用union-subclass要求主键不能自增长 --> <!-- 子类:猫 --> <union-subclass name="Cat" table="t_cat"> <property name="catching"></property> </union-subclass> |
夜光总结:
推荐使用
注意:主键不能为自增长,这一点很重要~~
3. cascade 级联操作
cascade 表示级联操作,在一对多、多对一、一对一种都可以设置
save-update 级联保存或更新
delete 级联删除
save-update,delete 级联保存、更新、删除
all 同上
none 不级联(默认值)
未完成:
hibernate查询:
二级缓存/连接池支持
Hibernate对session管理(案例)
4. hibernate查询
Hibernate提供的查询:
1)主键查询
get/load
2) 对象导航方式
3) HQL查询
Hibernate提供的面向对象的查询方式