数据库:

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. NeurIPS2018: DropBlock: A regularization method for convolutional networks

    NIPS 改名了!改成了neurips了... 深度神经网络在过参数化和使用大量噪声和正则化(如权重衰减和 dropout)进行训练时往往性能很好.dropout 广泛用于全连接层的正则化,但它对卷积 ...

  2. 找到最大或最小的N个值

    对于python原生的数据类型来说,并不存在直接的方法可以找到最大或最小的N个值, 传统的方法必须先排序,然后再截取相应的值,而且对于集合这类数据类型来说还不能直接排序, 需要先转化为列表才行,有的时 ...

  3. Python导出数据生成excel报表

    #_*_coding:utf-8_*_ import MySQLdb import xlwt from datetime import datetime def get_data(sql): # 创建 ...

  4. vue-router原理分析

    本文整理总结自: https://zhuanlan.zhihu.com/p/27588422 单页面应用(SPA)的核心之一是: 更新视图而不重新请求页面, 实现这一点主要是两种方式: 1.Hash: ...

  5. HTTPS协议原理透析

    1.HTTPS本身并非协议,而是标准的HTTP协议架在SSL/TLS协议之上的一种结构.(一种不太合适的说法可以认为是两种协议的叠加).HTTP是工作在OSI7层模型的最上层,就是第7层:Applic ...

  6. HTML-CSS浮动元素详解

    浮动定位是指 1.1将元素排除在普通流之外,即元素将脱离标准文档流 1.2元素将不在页面占用空间 1.3将浮动元素放置在包含框的左边或者右边 1.4浮动元素依旧位于包含框之内 2. 浮动的框可以向左或 ...

  7. 创建表空间的sql语句

    create tablespace ldcounter logging datafile 'D:\user_data.dbf' size 50m autoextend on next 50m maxs ...

  8. SQLite connection strings

    Basic Data Source=c:\mydb.db;Version=3; Version 2 is not supported by this class library. SQLite In- ...

  9. GridView设置多个DatakeyNames

    1.aspx页面GridView直接绑定DataKeyNames aspx设置: <asp:GridView ID="grvGrid" runat="server& ...

  10. C#操作计划任务

    昨天有一个任务,就是要下载相关文件,然后保存在相关路径下,这个没什么难度,所以就略过不谈,主要谈谈定时下载,即每天某个固定时间执行下载,这个功能我是用C#代码来操作windows自带的任务计划来实现的 ...