`

9.Hibernate的多对多单向关联映射

阅读更多

hibernate多对多关联映射(单向User---->Role)

具体映射方式:
    <set name="roles" table="t_user_role">
        <key column="userid"/>
        <many-to-many class="Role" column="roleid"/>
    </set>

 

一:实体类:

package com.tao.hibernate.many2many;

public class Role {
	private Integer id;
	private String name;

	public Role() {
		super();
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}
 
package com.tao.hibernate.many2many;

import java.util.Set;

public class User {
	private Integer id;
	private String name;
	private Set<Role> roles;

	public User() {
		super();
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Set<Role> getRoles() {
		return roles;
	}

	public void setRoles(Set<Role> roles) {
		this.roles = roles;
	}
}
 

二:映射文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="com.tao.hibernate.many2many">
	<class name="Role" table="t_role">
		<id name="id" column="id" type="integer">
			<generator class="native">
			</generator>
		</id>
		<property name="name" column="name" />
		
	</class>
</hibernate-mapping>
 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="com.tao.hibernate.many2many"
	auto-import="false">
	<class name="User" table="t_user">
		<id name="id" column="id" type="integer">
			<generator class="native">
			</generator>
		</id>
		<property name="name" column="name" />
		<set name="roles" table="t_user_role" cascade="all">
			<key column="userId" />
			<many-to-many class="Role" column="roleId" />
		</set>
	</class>
</hibernate-mapping>
 

三:测试类:

package com.tao.hibernate.many2many;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import com.tao.hibernate.HibernateUtils;

public class TestMain {
	Session session = HibernateUtils.getFactory().openSession();

	@Test
	public void testSave() {
		User u1 = new User();
		u1.setName("u1");
		User u2 = new User();
		u2.setName("u2");
		User u3 = new User();
		u3.setName("u3");

		Role r1 = new Role();
		r1.setName("admin");
		Role r2 = new Role();
		r2.setName("guest");

		Set<Role> roles1 = new HashSet<Role>();
		roles1.add(r1);
		Set<Role> roles2 = new HashSet<Role>();
		roles2.add(r2);
		Set<Role> roles3 = new HashSet<Role>();
		roles3.add(r1);
		roles3.add(r2);

		u1.setRoles(roles1);
		u2.setRoles(roles2);
		u3.setRoles(roles3);

		Transaction ts = session.beginTransaction();
		ts.begin();
		session.save(u1);
		session.save(u2);
		session.save(u3);
		ts.commit();
	}

	@Test
	public void testLoad() {
		Session session = HibernateUtils.getFactory().openSession();
		User u1 = (User) session.load(User.class, 1);
		System.out.println(u1.getName());
		for (Iterator<Role> iter = u1.getRoles().iterator(); iter.hasNext();) {
			System.out.println(iter.next().getName());
		}
	}

}
分享到:
评论

相关推荐

    Hibernate关联映射

    6. Hibernate 多对一外键单向关联: 在多对一关联中,多个实体(如 Order)可以关联到一个实体(如 Customer)。在 Order 实体类中,会有 `many-to-one` 元素指向 Customer。 7. Hibernate 多对一连接表单向关联:...

    hibernate多对一单向关联关系实现源码

    在Java的持久化框架Hibernate中,多对一(ManyToOne)关联关系是一种常见的对象关系映射(ORM)场景。这种关系通常出现在一个实体类拥有多条与另一个实体类相关的记录,而另一个实体类可能只有一条对应的记录。例如...

    hibernate 单向多对多关联映射练习

    以上就是关于Hibernate单向多对多关联映射的基本介绍和实践。实际应用中,还需考虑性能优化、事务管理、懒加载等问题。通过不断的练习和学习,你可以更熟练地掌握这一重要功能,提升项目开发的效率和质量。

    hibernate关联映射详解

    包含《多对多双向关联映射》《多对一单向关联映射》《多对一双向关联映射》《一对多单向关联映射》等文档,并有图解及例子,非常适合新手学习,尤其是刚刚接触hibernate,对映射关系不清楚的。。。。

    hibernate多对多关联映射(单项关联)

    在Java的持久化框架Hibernate中,多对多关联映射是一种常见的关系模型,它用于处理两个实体类之间存在多个对应关系的情况。这篇博客"hibernate多对多关联映射(单项关联)"深入探讨了如何在Hibernate中实现这种映射...

    hibernate一对多关联映射(单向关联)

    至此,我们在User类中完成了对Order的单向关联映射。为了使数据库表能够正确地反映这种关系,我们需要在数据库中创建对应的外键约束。通常,Hibernate会在子实体(Order)的表中创建一个引用父实体(User)主键的...

    Hibernate一对多单向关联映射

    本篇主要探讨的是如何在Hibernate中实现一对多的单向关联映射。 一、概念理解 一对多关联意味着一个实体(如部门)可以有多个关联实体(如员工),而反过来,每个员工只属于一个部门。单向关联则表示只有部门知道其...

    Hibernate一对一唯一外键关联映射(单向关联)

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是常见的关系数据库模型在对象模型中的体现。这种关联通常用于表示两个实体之间非常特殊的联系,比如一个人只有一个身份证,或者一个公司只有一个总部...

    Hibernate一对一主键关联映射(单向关联)

    总结来说,Hibernate中的一对一主键关联映射允许两个实体共享同一个主键,实现单向关联时只需在依赖方添加对另一方的引用。在实际应用中,应根据业务需求谨慎选择关联类型,以确保数据的完整性和一致性。

    hibernate 多对多全注解(单向关联、双向关联)

    hibernate关联映射注解多对多单向关联、

    Hibernate 一对一外键单向关联

    本篇文章将深入探讨Hibernate中的一对一外键单向关联。 首先,一对一外键关联指的是一个实体通过外键直接引用另一个实体的主键。在单向关联中,只有其中一个实体知道另一个实体的存在,而另一个实体则无感知。这种...

    hibernate单向一对多关联映射(注解版)

    在Java的持久化框架Hibernate中,单向一对多关联映射是常见的数据关系处理方式,尤其是在处理数据库中的实体类和表之间的关系时。本主题主要关注如何使用注解来实现这种映射。Hibernate通过注解使得对象关系映射...

    Hibernate 一对多外键单向关联

    在Java持久化框架Hibernate中,一对多外键单向关联是一种常见的关系映射方式,它描述了一对多的关系,其中一个实体(例如Person)可以与多个其他实体(例如Address)相关联,而关联的方向只从多方(Address)指向...

    hibernate多对多单向关联

    多对多单向关联 &lt;br&gt;需要注意映射规则: &lt;set name="users" table="t_user_role"&gt;&lt;br&gt; &lt;key column="roleid"/&gt;&lt;br&gt; &lt;many-to-many class="com.bjsxt.hibernate.User" column="userid"/&gt; &lt;/set&gt;

    hibernate主键实现一对一单向关联关系源码

    本主题将深入探讨如何使用Hibernate通过主键来实现一对一的单向关联关系,并提供相关的源码分析。 首先,我们需要理解一对一关联关系的基本概念。在数据库中,一对一关系意味着两个表中的每一条记录都对应另一表中...

    Hibernate教程10_关系映射之多对一单向关联

    本教程主要聚焦于Hibernate中的一个关键概念——关系映射,特别是多对一单向关联的实现。这种关联类型常出现在数据库设计中,比如一个部门可以有多名员工,但一个员工只属于一个部门。 首先,我们要理解多对一关系...

Global site tag (gtag.js) - Google Analytics