Hibernate之一对多关联映射
2013-10-31 16:49
357 查看
hibernate中的一对多关联映射包括单向一对多关联映射和双向一对多关联映射。下面还是通过具体的实例说一下这两种映射。
实例:
一个班级有多个学生,这样班级和学生的关系就是一对多的关系。
单向一对多关联映射
类关系图
映射文件Class.hbm.xml
映射文件student.hbm.xml
生成的建表语句:
表结构
注意:
这样写映射文件,实体间的关系是由一的一端维护,这样多的一端student就不知道class的存在,所以在保存student的时候关系字段classesid是为null的,如果将该关系字段设置为非空,则
将无法保存数据,另外因为student不维护关系,而class维护关系,class就会发出多余的update语句。这样效率肯定大打折扣,为了解决这一问题,我们引出双向一对多映射的概念。
双向一对多关联映射
类关系图
映射文件Class.hbm.xml
注意:
使用inverse后,多的这端不在维护关系,也就是说,保存一的时候,它不再自动保存多。它将影响存储
映射文件student.hbm.xml
生成的sql语句
表结构
这样采用双向一对多关联映射就完美解决单向一对多关联映射所出现的问题了。
实例:
一个班级有多个学生,这样班级和学生的关系就是一对多的关系。
单向一对多关联映射
类关系图
映射文件Class.hbm.xml
<hibernate-mapping> <class name="com.bjpowernode.hibernate.Classes" table="t_classes"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <set name="students"> <key column="classesid"/> <one-to-many class="com.bjpowernode.hibernate.Student"/> </set> </class> </hibernate-mapping>
映射文件student.hbm.xml
<hibernate-mapping> <class name="com.bjpowernode.hibernate.Student" table="t_student"> <id name="id"> <generator class="native"/> </id> <property name="name"/> </class> </hibernate-mapping>
生成的建表语句:
createtable t_classes (id integer not null auto_increment, name varchar(255), primarykey (id))
createtable t_student (id integer not null auto_increment, name varchar(255),classesid integer, primary key (id))
altertable t_student add index FK4B9075706FDF3B8F (classesid), add constraintFK4B9075706FDF3B8F foreign key (classesid) references t_classes (id)
表结构
注意:
这样写映射文件,实体间的关系是由一的一端维护,这样多的一端student就不知道class的存在,所以在保存student的时候关系字段classesid是为null的,如果将该关系字段设置为非空,则
将无法保存数据,另外因为student不维护关系,而class维护关系,class就会发出多余的update语句。这样效率肯定大打折扣,为了解决这一问题,我们引出双向一对多映射的概念。
双向一对多关联映射
类关系图
映射文件Class.hbm.xml
<hibernate-mapping> <class name="com.bjpowernode.hibernate.Classes" table="t_classes"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <set name="students" inverse="true"> <key column="classesid"/> <one-to-many class="com.bjpowernode.hibernate.Student"/> </set> </class> </hibernate-mapping>
注意:
使用inverse后,多的这端不在维护关系,也就是说,保存一的时候,它不再自动保存多。它将影响存储
映射文件student.hbm.xml
<hibernate-mapping> <class name="com.bjpowernode.hibernate.Student" table="t_student"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <many-to-one name="classes" column="classesid"/> </class> </hibernate-mapping>
生成的sql语句
createtable t_classes (id integer not null auto_increment, name varchar(255), primarykey (id)) createtable t_student (id integer not null auto_increment, name varchar(255),classesid integer, primary key (id)) altertable t_student add index FK4B9075706FDF3B8F (classesid), add constraintFK4B9075706FDF3B8F foreign key (classesid) references t_classes (id)
表结构
这样采用双向一对多关联映射就完美解决单向一对多关联映射所出现的问题了。
相关文章推荐
- Hibernate注解----关联映射注解以及课程总结详解----图片版本
- 【Hibernate步步为营】--单向关联一对一映射
- Hibernate对象关系映射----关联映射(二)
- [JAVA] Hibernate 多对一单向关联映射
- 【Hibernate】(八)关联映射之多对多映射
- Hibernate(六)——多对多关联映射
- Hibernate关联关系映射(多对一关联映射)
- Hibernate关联映射 --- 多对多实例分析(单向关联)
- Hibernate的关联映射之1-N关联映射
- hibernate多对一关联映射
- hibernate之关于一对一单向,双向关联映射
- SSH框架之Hibernate的关联映射之一对多、多对一映射
- 【Java】Hibernate(七)关联映射之多对一
- 初识Hibernate之关联映射(一)
- 【Hibernate步步为营】--双向关联一对一映射详解(二)
- hibernate基础(五)--一对多关联映射
- 【SSH进阶之路】Hibernate映射——一对一双向关联映射(六)
- 【hibernate】关联映射那些事(四)----继承映射
- hibernate学习笔记-2入门初体验关联映射
- Hibernate关系映射级别注解(多对多单向外键关联、多对多双向外键关联)