hibernate总结之关联映射(多对一和一对多)
2014-01-07 18:40
627 查看
1.对象-关系映射
对象-关系映射(Object/Relation Mapping,简称ORM),是随着面向对象的软件开发方法发展而产生的。面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。
2.关联映射分类:
单项关联:多对一,一对多,一对一
双向关联:多对一/一对多,一对一
3.双向关联也就是两个单向关联组合而成的,就直接看双向关联(多对一/一对多)
首先看两个模型吧
由两个表之间的关系可以看出来,学生是多的一方,小组是一的一方。
那我们来看看两者之间的javabean是如何写的吧
学生bean
小组bean
映射文件主要是由两个标签哎牵涉到这两者之间的关系的
放在学生的映射文件中
<many-to-one name="group" column="groupid" cascade="all" fetch="join" ></many-to-one>
常用的属性
name: 属性名。
column (可选): 外间字段名。它也可以通过嵌套的 <column>元素指定。
class (可选 - 默认是通过反射得到属性类型): 关联的类的名字。
cascade(级联) (可选): 指明哪些操作会从父对象级联到关联的对象。
unique (可选): 使用DDL为外键字段生成一个唯一约束。此外, 这也可以用作property-ref的目标属性。这使关联同时具有 一对一的效果。
not-null (可选): 使用DDL为外键字段生成一个非空约束。
lazy (可选 - 默认为 proxy): 默认情况下,单点关联是经过代理的。lazy="no-proxy"指定此属性应该在实例变量第一次被访问时应该延迟抓取(fetche
lazily)(需要运行时字节码的增强)。 lazy="false"指定此关联总是被预先抓取。
放在小组映射文件中
<set name="users" lazy="true" inverse="true">
<key column="groupid"></key>
<one-to-many class="ForumUsers"/>
</set>
<
对象-关系映射(Object/Relation Mapping,简称ORM),是随着面向对象的软件开发方法发展而产生的。面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。
2.关联映射分类:
单项关联:多对一,一对多,一对一
双向关联:多对一/一对多,一对一
3.双向关联也就是两个单向关联组合而成的,就直接看双向关联(多对一/一对多)
首先看两个模型吧
由两个表之间的关系可以看出来,学生是多的一方,小组是一的一方。
那我们来看看两者之间的javabean是如何写的吧
学生bean
package com.iflysse.hiber.domain; import java.io.Serializable; import java.util.List; import java.util.Set; import com.alibaba.fastjson.JSONObject; /** * @desc: ForumUsers * @author: junhan * @createTime:2013-12-11 17:20:01 * @history: * @version: v1.0 */ public class ForumUsers implements Serializable { /** * serialVersionUID */ private static final long serialVersionUID = 3018791976041484128L; /** * 用户主键 */ private long userid; /** * 用户名 */ private String username; /** * 所属组 */ private ForumGroup group; /** * @param username * the usernameto set */ public void setUsername(String username) { this.username = username; } /** * @return the username */ public String getUsername() { return username; } /** * @param userid * the useridto set */ public void setUserid(long userid) { this.userid = userid; } /** * @return the userid */ public long getUserid() { return userid; } public ForumGroup getGroup() { return group; } public void setGroup(ForumGroup group) { this.group = group; } @Override public String toString() { return JSONObject.toJSONString(this); } }
小组bean
/* * Copyright @ 2013 com.iflysse.trains * exam-persis-hib 下午10:14:46 * All right reserved. * */ package com.iflysse.hiber.domain; import java.io.Serializable; import java.util.Set; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.SequenceGenerator; import javax.persistence.Table; import javax.persistence.Transient; import org.hibernate.annotations.Formula; import com.alibaba.fastjson.JSONObject; /** * @desc: exam-persis-hib * @author: junhan * @createTime: 2013年12月29日 下午10:14:46 * @history: * @version: v1.0 */ @Entity @Table(name = "TB_FORUM_GROUP") @SequenceGenerator(name = "gorumGroupId", sequenceName = "SEQ_FORUM_GROUP") public class ForumGroup implements Serializable { /** * serialVersionUID */ private static final long serialVersionUID = -1812764688438325842L; /** * 主键 */ @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "gorumGroupId") private int groupid; /** * 组名 */ @Column private String groupname; /** * 组员 */ private Set<ForumUsers> users; public int getGroupid() { return groupid; } public void setGroupid(int groupid) { this.groupid = groupid; } public String getGroupname() { return groupname; } public void setGroupname(String groupname) { this.groupname = groupname; } public Set<ForumUsers> getUsers() { return users; } public void setUsers(Set<ForumUsers> users) { this.users = users; } @Override public String toString() { return JSONObject.toJSONString(this); } }
映射文件主要是由两个标签哎牵涉到这两者之间的关系的
放在学生的映射文件中
<many-to-one name="group" column="groupid" cascade="all" fetch="join" ></many-to-one>
常用的属性
name: 属性名。
column (可选): 外间字段名。它也可以通过嵌套的 <column>元素指定。
class (可选 - 默认是通过反射得到属性类型): 关联的类的名字。
cascade(级联) (可选): 指明哪些操作会从父对象级联到关联的对象。
unique (可选): 使用DDL为外键字段生成一个唯一约束。此外, 这也可以用作property-ref的目标属性。这使关联同时具有 一对一的效果。
not-null (可选): 使用DDL为外键字段生成一个非空约束。
lazy (可选 - 默认为 proxy): 默认情况下,单点关联是经过代理的。lazy="no-proxy"指定此属性应该在实例变量第一次被访问时应该延迟抓取(fetche
lazily)(需要运行时字节码的增强)。 lazy="false"指定此关联总是被预先抓取。
放在小组映射文件中
<set name="users" lazy="true" inverse="true">
<key column="groupid"></key>
<one-to-many class="ForumUsers"/>
</set>
<
set
name
=
"children"
// 设定待映射持久化类的属性名:这里为你定义的类的childred属性
相关文章推荐
- hibernate 关联映射 一对多 和 多对一
- hibernate 关联映射:多对一(一对多)双向关联关系
- Eclipse快速上手Hibernate--7. 关联映射(一对多) (1)
- Hibernate关系映射级别注解(一对多单向外键关联、一对多(多对一)双向外键关联)
- hibernate 一对多 关系关联映射
- Eclipse快速上手Hibernate--7. 关联映射(一对多) (3)
- 【Hibernate框架】关联映射(一对多,多对一)
- 初次邂逅Hibernate之关联映射(一对多,多对一,双向)
- Eclipse快速上手Hibernate--7. 关联映射(一对多) (2)
- 总结-hibernate关系映射-一对多/多对一映射
- Eclipse快速上手Hibernate--7. 关联映射(一对多) (1)
- hibernate中关联映射的学习总结
- Hibernate几种关系映射总结(单向关联)
- hibernate 关联映射 双向多对一(一对多)
- hibernate映射关系 一对多、多对一单向关联 一对多双向关联
- Hibernate 关联映射总结
- Hibernate一对多、多对一关联映射
- Hibernate关联映射(单项多对一和一对多、双向一对多)
- Eclipse快速上手Hibernate--7. 关联映射(一对多) (3)
- hibernate关联映射(一对多)