hibernate进阶之路之多对一映射(三)

原创 2016年05月31日 15:40:53

        本篇博客将介绍hibernate多对一映射,多对一映射应该是使用最为频繁,也是最为常用的映射。映射原理是在多的一端加入一个外键,指向了一的一端。

        首先建立实体对象Group和User:

public class Group {

	private int id;
	
	private String name;

        //省略getter和setter
}
public class User {

	private int id;
	
	private String name;
	
	private Group group;

        //省略getter和setter
}
User持有Group的引用。


        建立实体相关的映射文件:

Group.hbm.xml:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<class name="com.tgb.hibernate.Group" table="t_group">
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="name"/>
	</class>
</hibernate-mapping>
User.hbm.xml:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<class name="com.tgb.hibernate.User" table="t_user">
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="name"/>
		<many-to-one name="group" column="groupid"/>
	</class>
</hibernate-mapping>
只需要添加一个<many-to-one/>标签即可。

  

       创建测试(只写逻辑代码):

                        session.beginTransaction();
			
			Group group = new Group();
			group.setName("用户组1");
			
			User user1 = new User();
			user1.setName("张三");
			user1.setGroup(group);
			
			User user2 = new User();
			user2.setName("李四");
			user2.setGroup(group);
			
			session.save(user1);
			session.save(user2);
			
			session.getTransaction().commit();
结果console输出:



TransientObjectException异常抛出,再看上面的输出的sql语句,没有先往t_group表中插入一条记录,而且t_user有外键关联,Group实体对象没有处于被session管理的状态,所以报了这个异常,解决办法可以在执行save(user)之前把group持久化了,session.save(group); 也可以在User.hbm.xml中的many-to-one标签添加属性cascade="save-update",就是添加级联,参数表示save或者update的时候会先把级联对象持久化再执行当前的操作。


结果输出:


数据库:

t_group:


t_user:


这样就实现了hibernate多对一实体映射。





版权声明:本文为博主原创文章,未经博主允许不得转载。

【SSH进阶之路】【九】hibernate5 注解映射【1】 多对一单向关联

在博客网站中,我们可能需要从某一篇文章找到其所关联的作者,这就需要从文章方建立起对用户的关联,即是多对一的映射关系。现在先看一个配置实例:我们的文章实体类package com.chenhao.hib...

【SSH进阶之路】Hibernate映射——多对一单向关联映射(四)

基本映射是对一个实体进行映射,关联映射就是处理多个实体之间的关系,将关联关系映射到数据库中,所谓的关联关系在对象模型中有一个或多个引用。...

【SSH进阶之路】Hibernate映射——多对多关联映射(八)

映射原理        不论是单向关联还是双向关联都是通过第三张表,将两个表中的主键放到第三张做一个关联。用第三张表来解决可能会造成数据冗余的问题。   举例   一个用户(User)对多个角色(Ro...

【SSH进阶之路】Hibernate映射——多对一单向关联映射(四)

概念        基本映射是对一个实体进行映射,关联映射就是处理多个实体之间的关系,将关联关系映射到数据库中,所谓的关联关系在对象模型中有一个或多个引用。   分类   ...
  • CHBSRZF
  • CHBSRZF
  • 2016年01月08日 16:28
  • 155

【SSH进阶之路】Hibernate映射——多对一单向关联映射(四)

这篇博客,我们开始介绍基于基本映射的关联关系映射。   概念          基本映射是对一个实体进行映射,关联映射就是处理多个实体之间的关系,将关联关系映射到数据库中,所谓的关...
  • gpfwcx
  • gpfwcx
  • 2015年11月17日 20:49
  • 192

【SSH进阶之路】Hibernate基本映射(三)

【SSH进阶之路】Hibernate基本原理(一) ,小编介绍了Hibernate的基本原理以及它的核心,采用对象化的思维操作关系型数据库。 【SSH进阶之路】Hibernate搭建开发环境+简单实例...

【SSH进阶之路】Hibernate基本映射(三)

概念          ORM(Object Relational Mapping),即对象关系映射。它的作用就是在关系型数据库和对象之间做了一个映射。从对象(Object)映射到关系(R...
  • CHBSRZF
  • CHBSRZF
  • 2016年01月08日 16:05
  • 139

【SSH进阶之路】Hibernate基本映射(三)

【SSH进阶之路】Hibernate基本原理(一) ,小编介绍了hibernate的基本原理以及它的核心,采用对象化的思维操作关系型数据库。 【SSH进阶之路】Hibernate搭建开发环境+简...

【SSH进阶之路】【十】hibernate5 注解映射【2】 一对多单向关联

在上一篇文章里,我们从端方向一端建立关联关系,完成了从文章到作者的关联关系建立,但在实际的博客网站中,用户肯定还需要获取自己所写的文章,这时可以建立用户(一)对文章(多)的单向关联映射。 先来看我们的...

【SSH进阶之路】【十二】hibernate5 注解映射【4】一对一外键关联

在实际博客网站中,文章内容的数据量非常多,它会影响我们检索文章其它数据的时间,如查询发布时间、标题、类别的等。这个时候,我们可以尝试将文章内容存在另一张表中,然后建立起文章——文章内容的一对一映射一对...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hibernate进阶之路之多对一映射(三)
举报原因:
原因补充:

(最多只允许输入30个字)