Hibernate的学习——8.hibernate关系映射_一对多

8.hibernate关系映射_一对多

上一节中,我们可以通过学生信息来获得班级信息,这次我们要通过班级信息来获取学生信息。
也就是说,有时候查询班级需要将班级对应的学生信息一起查询,这个时候 使用一对多的关联会比较方便。

  1. 首先,表结构是不发生改变的
    在这里插入图片描述

  2. 其次,类的结构发生了改变,在学生类中不需要有班级类的变量了。而在班级类中,因为一个班级对应着许多个学生,所以需要定义一个HashSet来储存学生对象,Set是无序的。
    在这里插入图片描述

  3. 配置Student.hbm.xml文件,把many to one的标签删掉就可以了。
    在这里插入图片描述

  4. 配置Cluss.hbm.xml,有一对set标签,里面有key和one-to-many的标签,key的column属性指定了外键名,one-to-many的class属性表示了对应"多"的那个实体类:
    在这里插入图片描述

  5. 如果还和上一节一样,由Student(“多”)来控制Cluss(“一”)保存执行的话(先保存班级,再保存学生),虽然也可以执行操作,但是会多出一些update语句来匹配没有填写的信息。反之,即使先保存学生,再保存班级,还是会出现几条更新语句。原因在于,当你保存学生信息的时候,它还不知道它的外键是谁。外键存在与学生表中(多的一端)在它还不知道自己的外键是谁的时候,它只能在最后发送update语句。
    一对多关联时保存数据会多出n条更新语句,效率比较低,一般不用一对多来管理数据.

  6. 最后,写一个测试类来通过查询班级表里面的信息顺便得到学生表里的信息。截图如下。
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_38268534/article/details/88547892
今日推荐