您的位置:首页 > 其它

Hibernate many2many映射关系

2015-07-28 10:29 295 查看
多对多映射关系:

开发步骤:

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的外键

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: