Hibernate关联映射之多对多
来源:互联网 发布:淘宝新手卖家群 编辑:程序博客网 时间:2024/05/16 08:58
对于多对多的映射关系也是我们在做项目的时候常见的一种情况本篇博客就来介绍一下hibernate的多对多的关联映射。
首先我们在这里的例子是项目与雇员之间的关系,即一个项目可以包含多个员工,一个员工也可以做多个项目,他们之间的关系是项目n---n员工。
1.在数据库中建立所需要的表及序列
--项目drop table projects;create table projects( pid int primary key, pname varchar2(100))drop sequence seq_projects_pId;create sequence seq_projects_pId START WITH 1000 INCREMENT BY 1--员工drop table employee;create table employee( eid int primary key, ename varchar2(100))drop sequence seq_employee_eId;create sequence seq_employee_eId START WITH 1000 INCREMENT BY 1--中间表drop table proemp;create table proemp( pid int constraint FK_proemp_pid references projects(pid), eid int constraint FK_employee_eid references employee(eid))
2.编写实体类
package com.yc.entity;import java.io.Serializable;import java.util.HashSet;import java.util.Set;public class Employee implements Serializable{private static final long serialVersionUID = -3338524489306397897L;private int eid;private String ename;private Set<Project> projects=new HashSet<Project>();//在这里省略get,set方法以及相关的构造函数}
package com.yc.entity;import java.io.Serializable;import java.util.HashSet;import java.util.Set;public class Project implements Serializable{private static final long serialVersionUID = 7815351737579867144L;private int pid;private String pname;private Set<Employee> employees=new HashSet<Employee>();//在这里省略get,set方法以及相关的构造函数}
3.创建hbm文件
Employee.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"><!-- Generated 2016-8-16 9:38:00 by Hibernate Tools 3.4.0.CR1 --><hibernate-mapping> <class name="com.yc.entity.Employee" table="EMPLOYEE"> <id name="eid" type="int"> <column name="EID" /> <generator class="sequence" > <param name="sequence">seq_employee_eId</param> </generator> </id> <property name="ename" type="java.lang.String"> <column name="ENAME" /> </property> <!-- 配置多对多的关联关系,反转关联关系的维护由对方进行 --> <set name="projects" table="PROEMP" inverse="true" lazy="true"> <key column="EID" /> <many-to-many class="com.yc.entity.Project" column="PID" /> </set> </class></hibernate-mapping>
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated 2016-8-16 9:38:00 by Hibernate Tools 3.4.0.CR1 --><hibernate-mapping> <class name="com.yc.entity.Project" table="PROJECTS"> <id name="pid" type="int"> <column name="PID" /> <generator class="sequence" > <param name="sequence">seq_projects_pId</param> </generator> </id> <property name="pname" type="java.lang.String"> <column name="PNAME" /> </property> <!-- 配置多对多的关联关系 --> <set name="employees" table="PROEMP" cascade="all" lazy="true"> <key column="PID"/> <many-to-many class="com.yc.entity.Employee" column="EID" /> </set> </class></hibernate-mapping>
4.在cfg文件中加入映射路径
<!-- 映射路径 --><mapping resource="com/yc/entity/Employee.hbm.xml"/><mapping resource="com/yc/entity/Project.hbm.xml"/>
5.编写测试类测试
package com.yc.test;import java.util.Collections;import org.hibernate.Session;import org.hibernate.Transaction;import org.junit.Test;import com.yc.entity.Employee;import com.yc.entity.Project;import com.yc.utils.HibernateUtil;public class MyTest {@Testpublic void testSave(){Project p1=new Project("项目一");Project p2=new Project("项目二");Employee e1=new Employee("张三");Employee e2=new Employee("李四");//项目一有 张三和李四参加Collections.addAll(p1.getEmployees(), e1,e2);//项目二有 张三参加p2.getEmployees().add(e1);Session session=HibernateUtil.getSession();Transaction tx=session.beginTransaction();session.save(p1);session.save(p2);tx.commit();HibernateUtil.closeSession(session);}}运行testSave()方法
0 0
- Hibernate关联映射之多对多
- Hibernate关联映射之多对多单/双向关联映射
- Hibernate关联关系映射之多对多关联关系
- 【Hibernate】(八)关联映射之多对多映射
- Hibernate映射之多对一关联映射
- Hibernate(4)关联映射之多对多
- hibernate之多对一关联映射
- 【Hibernate步步为营】--关联映射之多对一
- 【Hibernate步步为营】--关联映射之多对一
- Hibernate关联映射之多对一单向关联映射
- Hibernate关联映射之多对一/一对多双向关联映射
- Hibernate之多对多映射
- Hibernate 关联映射 之多对一关联(一)
- hibernate关联映射之多对一单向关联
- Hibernate关联映射之多对一、一对一映射
- 【HIbernate】(五)关联映射之多对一映射
- 【HIbernate】(五)关联映射之多对一映射
- 【Hibernate】从入门到精通(七)关联映射之多对多映射
- 基于ant的jmeter自动化性能测试
- 响应者链(Responder Chain)
- 浅谈IQKeyboardManager第三方库的使用
- 利用caffe的python接口进行训练时遇到的问题
- org.springframework.web.multipart.MultipartException: The current request is not a multipart request
- Hibernate关联映射之多对多
- ViewPager+Fragment实现无限加载
- android源码编译出错,一键解决
- link.exe 的参数
- 字符串
- Maven核心概念
- 用到了base64转图片文件的函数,记录一下
- 《史蒂夫·乔布斯传》(Steve Jobs)官方正式中文版高清PDF
- 10129 - Play on Words