Hibernate many2many映射关系

多对多映射关系:

开发步骤:

JavaBean 映射文件  测试

图片详解:

1.javaBean 

Project.java

package cn.itcast.many2many;

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

public class Project {
	private int proj_id;
	@Override
	public String toString() {
		return "Project [proj_id=" + proj_id + ", proj_name=" + proj_name
				+ ", developers=" + developers + "]";
	}
	private String proj_name;
	private Set<Developer> developers=new HashSet<Developer>();
	public int getProj_id() {
		return proj_id;
	}
	public void setProj_id(int proj_id) {
		this.proj_id = proj_id;
	}
	public String getProj_name() {
		return proj_name;
	}
	public void setProj_name(String proj_name) {
		this.proj_name = proj_name;
	}
	public Set<Developer> getDevelopers() {
		return developers;
	}
	public void setDevelopers(Set<Developer> developers) {
		this.developers = developers;
	}

}

Employee.java

package cn.itcast.many2many;

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

public class Developer {
	@Override
	public String toString() {
		return "Developer [d_id=" + d_id + ", d_name=" + d_name + ", projects="
				+ projects + "]";
	}
	private int d_id;
	private String d_name;
	private Set<Project> projects=new HashSet<Project>();
	public int getD_id() {
		return d_id;
	}
	public void setD_id(int d_id) {
		this.d_id = d_id;
	}
	public String getD_name() {
		return d_name;
	}
	public void setD_name(String d_name) {
		this.d_name = d_name;
	}
	public Set<Project> getProjects() {
		return projects;
	}
	public void setProjects(Set<Project> projects) {
		this.projects = projects;
	}
}

2.配置文件

多对多的关系映射

1.映射的集合属性

2.属性对应的中间表

3.外键字段 projid

4.外键字段对应的中间表属性did

5.集合属性元素的类型

Project.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.itcast.many2many" auto-import="true">
	<class name="Project">
		<id name="proj_id">
			<generator class="native"></generator>
		</id>
		<property name="proj_name" column="proj_name" length="20" type="string"></property>
		<!--
			多对多的关系映射
			1.映射的集合属性
			2.属性对应的中间表
			3.外键字段 projid
			4.外键字段对应的中间表属性did
			5.集合属性元素的类型

		 -->
		 <set name="developers" table="t_relation" cascade="save-update" inverse="true">
		 	<key column="projid"></key>
		 	<many-to-many class="Developer" column="did"></many-to-many>
		 </set>
	</class>
</hibernate-mapping>

Developer.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.itcast.many2many" auto-import="true">
	<class name="Developer">
		<id name="d_id">
			<generator class="native"></generator>
		</id>
		<property name="d_name" column="d_name" length="20" type="string"></property>
		<!--
			这里配置的是多对多的关系映射
		 -->
		 <set name="projects" table="t_relation">
		 	<key column="did"></key>
		 	<many-to-many class="Project" column="projid"></many-to-many>
		 </set>
	</class>
</hibernate-mapping>

测试类:

package cn.itcast.many2many;

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

import cn.itcast.utils.HibernateUtil;

public class App {
	@Test
	public void test(){
		Session session = HibernateUtil.getSession();
		Transaction transaction = session.beginTransaction();
		//通过项目表维护员工表
		//1.项目表
		Project proj=new Project();
		proj.setProj_name("OA项目");
		Project proj2=new Project();
		proj2.setProj_name("ERP系统");
		//2.员工表
		Developer dev_lwk=new Developer();
		dev_lwk.setD_name("李卫康");
		Developer dev_hw=new Developer();
		dev_hw.setD_name("韩玮");
		Developer  dev_ccs=new Developer();
		dev_ccs.setD_name("程崇树");
		//3.关系
		proj.getDevelopers().add(dev_lwk);
		proj.getDevelopers().add(dev_hw);

		proj2.getDevelopers().add(dev_lwk);
		proj2.getDevelopers().add(dev_ccs);

		session.save(proj);
		session.save(proj2);
		transaction.commit();
		session.close();
	}
}

运行测试得到的数据库表:

t_relation的外键

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

时间: 2024-10-12 02:32:07

Hibernate many2many映射关系的相关文章

Hibernate基数映射关系

Hibernate基数映射关系 一.基数映射——一对一关系映射 每个账户对应一个地址的数据库关系为例: 1.SQL脚本:    -- 一对一(唯一外键)    drop table t_addr;    drop table t_act;    create table t_act(       id int primary key auto_increment,       actNo varchar(50) not null unique,       passwd varchar(50)

Hibernate关联映射关系

一.双向一对多关联映射关系:当类与类之间建立了关联,就可以方便的从一个对象导航到另一个或另一组与它关联的对象(一对多双向关联和多对一双向关联是完全一样的) 1.1创建实体类(Emp(员工),Dept(部门)) /* * 员工实体类 */public class Emp { private Integer empId; //员工编号 private String empName; //员工姓名 private Dept dept; //所处部门 //get(),set()方法省略 } /* * 部

Hibernate One2Many映射关系

多对一映射与一对多映射: 使用部门和员工的关系来说明问题.一个部门可以有多个员工,但是一个员工只属于一个部门. 开发步骤: (1)JavaBean的设计,Dept(部门表) Employee(员工表) (2)映射关系 (3)测试 1.Dept和Employee Javabean Dept package cn.itcast.one2many; import java.util.HashSet; import java.util.Set; public class Dept { private i

hibernate annotation映射关系详解

在hibernate中处理关系映射的方法有两种.一种是使用传统的xml来处理它们的映射关系,另一种是基于annotation的注解方式.我个人非常喜欢使用annotation,觉得这种方式显得更加的简洁,大大减少工作量.在hibernate4中annotation包无需再引入,因为已经集成了annotation包. 在讲hibernate annotation之前,我们先回想一下.在数据库创建表的时候有几个关键点是必须的.表名.字段名.字段类型.约束条件.从这些点出发我们来看看一个hiberna

Hibernate对象映射关系:一对一

一:项目截图 二:业务代码 package com.cloud.domain; import java.util.Date; public class IdCard { private Integer id; private Date validateDte; private Person person; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Dat

Hibernate对象映射关系:多对一

一:项目截图 二:业务代码 package com.cloud.domain; import java.util.Set; public class Department implements java.io.Serializable{ /** * 实现java.io.Serializable 接口的类是可序列化的. * 没有实现此接口的类将不能使它们的任一状态被序列化或逆序列化. */ private static final long seriaVersionUID = 1L; privat

java框架篇---hibernate(一对一)映射关系

对象-关系映射(Object/Relation Mapping,简称ORM),是随着面向对象的软件开发方法发展而产生的,是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术,本质上就是将数据从一种形式转换到另外一种形式. 面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统.对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据.内存中的对象之间存在关联和继承关系,而在数据库中,关系数

hibernate的映射关系之一对多

关系:事物之间相互作用.相互联系的状态.范围最大. 联系:在关系数据库中表示实体与实体之间的联系,1:1,1:n,m:n. 关联:表示对象之间的关系,既有数量性,又有方向性:动词:将对象之间通过某种方式联系起来. 映射:这里指java对象和数据库表的一种对应关系.动词:形成这种对应关系. 级联:有关系的双方中操作一方,另一方也将采取一些动作. 关联的联系种类 在不考虑关联的方向前提下,联系就是关系数据库中表示实体与实体之间的联系,1:1,1:n,m:n. 一对一联系(1:1):如用户和身份证.一

Hibernate学习——映射关系

学习记录 O(∩_∩)O . 如果你恰巧路过,希望你能停下脚步瞧一瞧,不足之处望指出,感激不尽~ 使用工具: 1.eclipse   2.hibernate压缩包(hibernate_4.3.11) 3.mysql 准备工作: 创建工程——>导入hibernate.jar包——>编写 hibernate.cfg.xml 配置文件 连接数据库 编写一个类读取hibernate.cfg.xml 一.单向一对多(例子:一个部门有多个员工)     1.建表(Employee员工表和dpet部门表)