数据库:

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. 【ELK】抓取AWS-ELB日志的logstash配置文件

    前言 ELK搭建没有难度,难的是logstash的配置文件,logstash主要分为三个部分,input,filter和output. input,输入源可选的输入源由很多,详情见ELK官网,这里我们 ...

  2. Docker容器部署tomcat出现中文乱码

    docker 容器部署tomcat后,日志文件中出现中文乱码,很多问号,中文的文件夹也是问好.先看看容器的locale: [root@docker1 ~]# docker exec -it 41de9 ...

  3. (转)Spring 缓存EhCacheFactoryBean

    Spring使用Cache 从3.1开始,Spring引入了对Cache的支持.其使用方法和原理都类似于Spring对事务管理的支持.Spring Cache是作用在方法上的,其核心思想是这样的:当我 ...

  4. HDU - 1134 Game of Connections 【DP】

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1134 题意 给出一个n 然后有2n个点 给两个点连一条边,最后连N条边,要求所有的边不能够交叉 问最多 ...

  5. 《程序员代码面试指南》第一章 栈和队列 构造数组的MaxTree

    题目 给出一个无重复元素的数组,构造此数组的MaxTree, java代码 /** * @Description: 构造数组的MaxTree * @Author: lizhouwei * @Creat ...

  6. 【leetcode刷题笔记】Valid Sudoku

    Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could be ...

  7. 常见http返回状态码

    200:表示从客户端发来的请求在服务器端被正常处理了. 302:临时重定向,该状态码表示请求的资源已经被分配了新的URI,希望用户本次能够通过新的UIRI访问. 304:未修改,服务端资源未改变,可直 ...

  8. MySQL5.7.9(GA)的安装

    1.解压ZIP文件到安装目录: 2.进入到bin目录,试运行mysqld --console,查看可能的出错信息,安装相应的辅助软件,如.net V4.0等: 3.编辑my.ini文件,关键内容如下: ...

  9. jQuery JS 入门记录

    1.类型转换 .toString() 转字符串 . parseInt() parseFloat() 强制转换 数字型(Number) 1.声明 var i = 1; var i = new Numbe ...

  10. wp8使用现有sqlite数据库

    就是把现有文件转移到隔离空间即可 代码如下 private async void CopyDB()        {            StorageFile fage = await Appli ...