多对多 hibernate映射
数据库:
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映射的更多相关文章
- (Hibernate进阶)Hibernate映射——多对多关联映射(八)
多对多映射是现实生活中最常见的映射,也是最容易理解的映射.废话少说,直接开始. 映射原理 不论是单向关联还是双向关联都是通过第三张表,将两个表中的主键放到第三张做一个关联.用第三张表来解决可能会造成数 ...
- (Hibernate进阶)Hibernate映射——多对一单向关联映射(四)
介绍基于基本映射的关联关系映射. 概念 基本映射是对一个实体进行映射,关联映射就是处理多个实体之间的关系,将关联关系映射到数据库中,所谓的关联关系在对象模型中有一个或多个引用. 分类 关联关系分为上述 ...
- Hibernate框架之双向多对多关系映射
昨天跟大家分享了Hibernate中单向的一对多.单向多对一.双向一对多的映射关系,今天跟大家分享下在Hibernate中双向的多对多的映射关系 这次我们以项目和员工举个栗子,因为大家可以想象得到,在 ...
- Hibernate多对多关系映射(建表)
下边讲述Hibernate多对多关系映射. 多对多关系的表的结构为: 两个实体表,还包含一个关系表,关系表为复合主键,如果要使用Hibernate多对多关系映射,则关系表必须只包含两个字段,如果生成了 ...
- hibernate映射的 关联关系:有 一对多关联关系,一对一关联关系,多对多关联关系,继承关系
hibernate环境配置:导包.... 单向n-1:单向 n-1 关联只需从 n 的一端可以访问 1 的一端 <many-to-one> 元素来映射组成关系: name: 设定待映射的持 ...
- hibernate 映射 多对一
一对多和上文讲的多对一两种映射关系,其实就是站在相反的角度考虑同样的事情. 一对多和多对一映射原理是一样的,都在多的一端加入一个外键指向一的一端.也就是说,在关系数据库的表中,他们的表及表字段都是一样 ...
- 菜鸟学习Hibernate——多对多关系映射
Hibernate中的关系映射,最常见的关系映射之一就是多对多关系映射例如用户与角色的关系,一个用户对应多个角色,一个角色对应多个用户.如图: Hibernate中如何来映射这两个的关系呢? 下面就为 ...
- 【SSH进阶之路】Hibernate映射——多对一单向关联映射(四)
[SSH进阶之路]Hibernate基本原理(一) ,小编介绍了Hibernate的基本原理以及它的核心,採用对象化的思维操作关系型数据库. [SSH进阶之路]Hibernate搭建开发环境+简单实例 ...
- Hibernate(六)——多对多关联映射
前面几篇文章已经较讲解了三大种关联映射,多对多映射就非常简单了,不过出于对关联映射完整性的考虑,本文还是会简要介绍下多对多关联映射. 1.单向多对多关联映射 情景:一个用户可以有多个角色,比如数据录入 ...
随机推荐
- Redis持久化——AOF(二)
核心知识点: 1.AOF:以独立日志的方式记录写命令,重启时再执行命令.与RDB不同的是解决数据持久化的实时性,可以记录所有写操作. 2.AOF工作流程:写入命令.文件同步.文件重写.文件加载. 3. ...
- 每天一个Linux命令(23)chmod命令
chmod命令用来变更文件或目录的权限. 在UNIX系统家族里,文件或目录权限的控制分别以读取.写入.执行3种一般权限来区分,另有3种特殊权限可供运用.用户可以使用chmod指令去变更文件与目 ...
- mac manpages 汉化
默认在终端进行man命令,如:man ls,会显示英文的帮助文档.本文教你如何查看中文文档. 资源:1.manpages-zh-1.5.2.tar.bz22.groff-1.21.tar.gz - ...
- Linux查看硬盘使用情况
df df - report file system disk space usage df是查看文件系统磁盘使用情况的命令.如: # df -h Filesystem Size Used Avail ...
- Ubuntu 16.04 NFS搭建
NFS服务器配置: 1.安装NFS相关包 apt-get install nfs-kernel-server nfs-common # centos 7# yum install nfs-utils ...
- Python — pandas
Pandas有两种数据结构:Series和DataFrame. 1.Series Series类似于一维数组,和numpy的array接近,由一组数据和数据标签组成.数据标签有索引的作用.数据标签是p ...
- linux应用之yum命令的软件源的更换(centos)
[1] 首先备份/etc/yum.repos.d/CentOS-Base.repo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/Cent ...
- windows 安装 pytorch
之前都在服务器上跑pytorch,近来发现新版本可在windows上跑了,甚是开心. 环境: windows7 python3 无CPU 步骤: 1. 确保确保python版本在3.5.3/3.6. ...
- 如何在Android开发中测试应用在真机上实验
1.首先将手机设置为调试模式 方法:设置——应用程序——开发——USB调试,打上√即可 2.用数据线连接至电脑 3.然后打开eclipse 右击点击工程,选择 Run as,再选择Run ...
- ACM学习历程——ZOJ 3822 Domination (2014牡丹江区域赛 D题)(概率,数学递推)
Description Edward is the headmaster of Marjar University. He is enthusiastic about chess and often ...