数据库:

create table EMPLOYEE
(
EMPID NUMBER(6) not null,
EMPNAME VARCHAR2(32)
) alter table EMPLOYEE
add primary key (EMPID)
; create table PROJECT
(
PROJID NUMBER(6) not null,
PROJNAME VARCHAR2(32)
) alter table PROJECT
add primary key (PROJID)
;
create table PROJ_EMP
(
PROJID NUMBER(6),
EMPID NUMBER(6)
) alter table PROJ_EMP
add constraint FK_EMPLOYEE_PROJ_EMP foreign key (EMPID)
references EMPLOYEE (EMPID);
alter table PROJ_EMP
add constraint FK_PROJECT_PROJ_EMP foreign key (PROJID)
references PROJECT (PROJID);
package com.emp.pojo;

import java.util.HashSet;
import java.util.Set; /**
* Project entity. @author MyEclipse Persistence Tools
*/ public class Project implements java.io.Serializable { // Fields private Integer projid;
private String projname; private Set<Employee> employee = new HashSet<Employee>(); // Constructors /** default constructor */
public Project() {
} /** full constructor */
public Project(String projname) {
this.projname = projname;
} // Property accessors public Integer getProjid() {
return this.projid;
} public void setProjid(Integer projid) {
this.projid = projid;
} public String getProjname() {
return this.projname;
} public void setProjname(String projname) {
this.projname = projname;
} public Set<Employee> getEmployee() {
return employee;
} public void setEmployee(Set<Employee> employee) {
this.employee = employee;
} }

员工

package com.emp.pojo;

import java.util.HashSet;
import java.util.Set; /**
* Employee entity. @author MyEclipse Persistence Tools
*/ public class Employee implements java.io.Serializable { // Fields private Integer empid;
private String empname; private Set<Project> project=new HashSet<Project>();
// Constructors /** default constructor */
public Employee() {
} /** full constructor */
public Employee(String empname) {
this.empname = empname;
} // Property accessors public Integer getEmpid() {
return this.empid;
} public void setEmpid(Integer empid) {
this.empid = empid;
} public String getEmpname() {
return this.empname;
} public void setEmpname(String empname) {
this.empname = empname;
} public Set<Project> getProject() {
return project;
} public void setProject(Set<Project> project) {
this.project = project;
} }
<?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">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.emp.pojo.Employee" table="employee" >
<id name="empid" type="java.lang.Integer">
<column name="EMPID" />
<generator class="native" />
</id>
<property name="empname" type="java.lang.String">
<column name="EMPNAME" length="32" />
</property>
<set name="project" table="proj_emp" cascade="save-update">
<key column="empid" />
<many-to-many class="com.emp.pojo.Project" column="projid" />
</set>
</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">
<!-- Mapping file autogenerated by MyEclipse Persistence Tools -->
<hibernate-mapping>
<class name="com.emp.pojo.Project" table="project" >
<id name="projid" type="java.lang.Integer">
<column name="PROJID" />
<generator class="native" />
</id>
<property name="projname" type="java.lang.String">
<column name="PROJNAME" length="32" />
</property>
<set name="employee" table="proj_emp" cascade="save-update">
<key column="projid" />
<many-to-many class="com.emp.pojo.Employee" column="empid"/>
</set>
</class>
</hibernate-mapping>
package com.emp.pojo;

import static org.junit.Assert.*;

import java.util.HashSet;
import java.util.Set; import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.BeforeClass;
import org.junit.Test; import sessionfactory.HibernateSessionFactory; public class EmployeeTest { @BeforeClass
public static void setUpBeforeClass() throws Exception {
} @Test
public void test() {
Session session = HibernateSessionFactory.getSession();
Transaction tx= session.beginTransaction();
Project proj1 = new Project();
proj1.setProjname("qq二次开发");
Project proj2 = new Project();
proj2.setProjname("华为");
Project proj3 = new Project();
proj3.setProjname("可乐");
Set<Project> xiaozhangset = new HashSet<Project>();
Employee xiaozhang = new Employee();
xiaozhang.setEmpname("张晓华");
Employee xiaowang = new Employee();
xiaowang.setEmpname("王国光"); xiaozhangset.add(proj1);
xiaozhangset.add(proj2);
xiaozhang.setProject(xiaozhangset);
xiaowang.setProject(xiaozhangset);
session.save(xiaozhang);
session.save(xiaowang);
tx.commit(); } }

测试,程序分别将记录加入三个表

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

多对多 hibernate映射的更多相关文章

  1. (Hibernate进阶)Hibernate映射——多对多关联映射(八)

    多对多映射是现实生活中最常见的映射,也是最容易理解的映射.废话少说,直接开始. 映射原理 不论是单向关联还是双向关联都是通过第三张表,将两个表中的主键放到第三张做一个关联.用第三张表来解决可能会造成数 ...

  2. (Hibernate进阶)Hibernate映射——多对一单向关联映射(四)

    介绍基于基本映射的关联关系映射. 概念 基本映射是对一个实体进行映射,关联映射就是处理多个实体之间的关系,将关联关系映射到数据库中,所谓的关联关系在对象模型中有一个或多个引用. 分类 关联关系分为上述 ...

  3. Hibernate框架之双向多对多关系映射

    昨天跟大家分享了Hibernate中单向的一对多.单向多对一.双向一对多的映射关系,今天跟大家分享下在Hibernate中双向的多对多的映射关系 这次我们以项目和员工举个栗子,因为大家可以想象得到,在 ...

  4. Hibernate多对多关系映射(建表)

    下边讲述Hibernate多对多关系映射. 多对多关系的表的结构为: 两个实体表,还包含一个关系表,关系表为复合主键,如果要使用Hibernate多对多关系映射,则关系表必须只包含两个字段,如果生成了 ...

  5. hibernate映射的 关联关系:有 一对多关联关系,一对一关联关系,多对多关联关系,继承关系

    hibernate环境配置:导包.... 单向n-1:单向 n-1 关联只需从 n 的一端可以访问 1 的一端 <many-to-one> 元素来映射组成关系: name: 设定待映射的持 ...

  6. hibernate 映射 多对一

    一对多和上文讲的多对一两种映射关系,其实就是站在相反的角度考虑同样的事情. 一对多和多对一映射原理是一样的,都在多的一端加入一个外键指向一的一端.也就是说,在关系数据库的表中,他们的表及表字段都是一样 ...

  7. 菜鸟学习Hibernate——多对多关系映射

    Hibernate中的关系映射,最常见的关系映射之一就是多对多关系映射例如用户与角色的关系,一个用户对应多个角色,一个角色对应多个用户.如图: Hibernate中如何来映射这两个的关系呢? 下面就为 ...

  8. 【SSH进阶之路】Hibernate映射——多对一单向关联映射(四)

    [SSH进阶之路]Hibernate基本原理(一) ,小编介绍了Hibernate的基本原理以及它的核心,採用对象化的思维操作关系型数据库. [SSH进阶之路]Hibernate搭建开发环境+简单实例 ...

  9. Hibernate(六)——多对多关联映射

    前面几篇文章已经较讲解了三大种关联映射,多对多映射就非常简单了,不过出于对关联映射完整性的考虑,本文还是会简要介绍下多对多关联映射. 1.单向多对多关联映射 情景:一个用户可以有多个角色,比如数据录入 ...

随机推荐

  1. python学习-3.一些常用模块用法

    一.time.datetime 时间戳转化为元组 1 >>> time.localtime() 2 time.struct_time(tm_year=2016, tm_mon=8, ...

  2. Django模型系统——ORM表结构对应关系

    对于数据库来说一般表结构只会有三种对应关系,分别是一对一.一对多和多对一,下面分别介绍: 1.一对多 何为一对多,例如一个学生只可能有一个班级,一个班级却又多个学生,班级表和学生表就是一对多的关系. ...

  3. CentOS7 添加用户到 sudoers

    1.在装完系统后,CentOS默认普通用户是无法使用sudo命令的,这时我们就需要将登陆的用户加入/etc/sudoers 文件中 假设用户名是yhd 3.切换到超级用户:$ su - 当然输入的 p ...

  4. maven导入项目时,缺少部分source folder

    今天导入公司的maven项目时,少了一些source folder,运行启动正常,但是页面打不开,找不到对应的目录文件,使用maven更新项目,重启编辑器也无效. 问题描述如图所示,缺少了图中的2个目 ...

  5. Vim 替换命令

    一,":substitute"的使用 :substitute 命令可以对一个指定范围的区域执行替换操作,可以简写为:s ,它的通用形式如下: :[range]substitute/ ...

  6. CSS整体布局

    主要内容: 一.外边距margin与填充padding 二.浮动float与显示display 三.主布局 四.定位方式posotion 一.外边距margin与填充padding 1.margin设 ...

  7. ELK初步指南

    ELK的简单科普文章,加入了自己的一些理解. 内容包括ELK的基本介绍, 应用场景, 架构设计, 监控及自监控, 业界进展及推荐资料等. 用户故事 场景一 作为一个运维工程师, 某天虚拟机出现故障, ...

  8. python练习_简单登录

    python练习_简单登录 需求: 做一个登录的小程序,验证用户与密码 要求登录三次错误后锁定 以下代码实现的功能与思路: 功能: 1.除admin以外的用户累计登录失败次数超过三次则锁定,此时需要管 ...

  9. Codeforces 429B Working out:dp【枚举交点】

    题目链接:http://codeforces.com/problemset/problem/429/B 题意: 给你一个n*m的网格,每个格子上有一个数字a[i][j]. 一个人从左上角走到右下角,一 ...

  10. 英语发音规则---Z字母

    英语发音规则---Z字母 一.总结 一句话总结:字母Z的名称zed /zed/,美式英语的称zee /zi:/,少数方言(如香港)读izzard /'izəɹd/. 1.字母Z在单词中发[z]? pu ...