关闭

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

186人阅读 评论(1) 收藏 举报

        本篇博客将介绍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多对一实体映射。





0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:83812次
    • 积分:2885
    • 等级:
    • 排名:第12327名
    • 原创:116篇
    • 转载:0篇
    • 译文:0篇
    • 评论:656条
    最新评论