Hibernate之一对多关联映射
来源:互联网 发布:阿里云企业邮箱好用吗 编辑:程序博客网 时间:2024/05/16 11:27
hibernate中的一对多关联映射包括单向一对多关联映射和双向一对多关联映射。下面还是通过具体的实例说一下这两种映射。
实例:
一个班级有多个学生,这样班级和学生的关系就是一对多的关系。
单向一对多关联映射
类关系图
映射文件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关联映射之一对多单向关联映射
- Hibernate关联映射之一对多、多对多映射
- Hibernate关联关系映射之一对多关联关系
- 【Hibernate】(七)关联映射之一对多映射
- Hibernate(1)关联映射之一对多
- 【Hibernate三】关系映射之一对多单项关联
- 【Hibernate四】关系映射之一对多双向关联
- 【Hibernate系列】(六):关联映射之一对多
- SSH框架之Hibernate的关联映射之一对多、多对一映射
- Hibernate之一对多关联
- Hibernate关联映射-----多对多关联
- 技术分析之Hibernate的关联关系映射之一对多映射
- Hibernate关联关系之一对多关联
- Hibernate关联映射--多对一映射
- Hibernate映射一对多单向关联(之一)
- Hibernate关联映射之一对多,多对一以及双向一对多
- 一份比较详细的DOS命令说明!
- Android如何使用读写cookie的方法
- android ListView 设置不滚动
- wait(),sleep(),notify()解析1
- android 设置Button或者ImageButton的背景透明 半透明 透明
- Hibernate之一对多关联映射
- 冰冷的世界开始洋溢着快乐的气息
- 16 Traits of Great IT Leaders
- 深入理解Linux中内存管理
- 卖乌龟的叔叔好像说过你只要拿出一只筷子
- 微信开放平台Android常见问题
- 预处理(条件编译)
- 关于matlab中textread
- 陈亮穷人续写广东省南海东方六社小学