建立一对多关系关系的表的原则是将一的一方的主键加入到多的一方的表作为外键。这里以学生和班级为例子来演示。以前不用hibernate时建立pojo类要在学生类Student中加入一个属性,即班级编号classesid.使用hibernate则不同了,需要在“一”的一方类中加入一个set集合,里面存放“多”的一方的对象。而在“多”的一方的类中需要加入一个“一”方的对象。也就是说在Classes类中需要加入一个set集合,存放Student对象,因为一个班级里面对应多个学生,所以用一个集合来表示。而每一个学生只能属于一个班级,所以学生类Student里面需要加入一个Classes类对象,表示所属班级。
这里主要介绍的是一对多的关联映射,多对一和一对多很接近,就不作阐述!
二、实例介绍
2.1,建立实体类和映射
Student类:
映射文件:
Classes类:映射文件:
2.2,测试类
三、特殊属性说明
3.1,lazy属性
lazy – 延迟加载(懒加载),一般用于集合的抓取策略,也就是说只在需要用到的情况下,再发出select语句,将其相关的对象查询出来。set默认lazy属性的值是true,即hibernate会自动使用懒加载策略,以提高性能。举例说明:
3.2,inverse属性
inverse – 标记由哪一方来维护关联关系(双向关联中会用到),inverse默认值为false,如果inverse设置为true,表示将由对方维护两者之间的关联关系。举例说明:
3.3,cascade属性
级联的意思是指定两个对象之间的操作联动关系,对一个对象执行了操作之后,对其指定的级联对象也需要执行相同的操作。总共可以取值为:all、none、save-update、delete:all-代表在所有的情况下都执行级联操作;none-在所有情况下都不执行级联操作;save-update-在保存和更新的时候执行级联操作;delete-在删除的时候执行级联操作
四、总结
今天的感觉就是,之前没有对底层进行封装的时候,所有的关系都体现在数据表的设计上,比如说,为了维护这种一对多的关系,我们在设计表单的时候就会在多的一方加入一的一方的主键作为外键。那么现在呢,则是将这种实体之间的联系配置到了配置文件中。但实际上,在执行的时候,还是和之前的SQL语句差不多。所以,运用一个框架,封装了之后,自然有其优势,但是它的灵活性还是会有所降低!
多对多映射和一对多映射在配置上,基本是一致的。Hibernate会自动生成中间表,采用many-to-many标签来表示其多对多的关联,同样采用集合来表示。下篇博客介绍继承映射和多态查询。