Hibernate中双向多对多的两种配置方式

1.建立多对多双向关联关系

 package cn.happy.entitys;

 import java.util.HashSet;
import java.util.Set; public class Employee {
private Integer empid;
private String empname;
private Set<ProEmp> emps = new HashSet<ProEmp>(); public Set<ProEmp> getEmps() {
return emps;
} public void setEmps(Set<ProEmp> emps) {
this.emps = emps;
} public Integer getEmpid() {
return empid;
} public void setEmpid(Integer empid) {
this.empid = empid;
} public String getEmpname() {
return empname;
} public void setEmpname(String empname) {
this.empname = empname;
} public Set<ProEmp> getProjects() {
return projects;
} public void setProjects(Set<ProEmp> projects) {
this.projects = projects;
} private Set<ProEmp> projects = new HashSet<ProEmp>();
}

Employee.java

 <?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.happy.entitys"> <class name="Employee" table="EMPLOYEE">
<id name="empid" column="EMPID">
<generator class="sequence">
<param name="sequence">STU_SID</param>
</generator>
</id>
<property name="empname" type="string" column="EMPNAME"></property> <set name="projects" table="PROEMP" cascade="save-update">
<key column="REMPID"></key>
<many-to-many class="Project" column="RPROID"></many-to-many>
</set> </class> </hibernate-mapping>

Employee.hbm.xml

 package cn.happy.entitys;

 import java.util.Set;

 public class Project {
private Integer proid;
private String proname;
private Set<ProEmp> pros;
public Integer getProid() {
return proid;
}
public Set<ProEmp> getPros() {
return pros;
}
public void setPros(Set<ProEmp> pros) {
this.pros = pros;
}
public void setProid(Integer proid) {
this.proid = proid;
}
public String getProname() {
return proname;
}
public void setProname(String proname) {
this.proname = proname;
}
}

Project.java

 <?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.happy.entity"> <class name="Project" table="PROJECT">
<id name="proid" column="PROID">
<generator class="sequence">
<param name="sequence">STU_SID</param>
</generator>
</id>
<property name="proname" type="string" column="PRONAME"></property>
<set name="employeses" table="PROEMP" cascade="save-update">
<key column="RPROID"></key>
<many-to-many class="Employee" column="REMPID"></many-to-many>
</set>
</class> </hibernate-mapping>

Project.hbm.xml

中间关系表

 package cn.happy.entitys;

 public class ProEmp {
private Integer id;
private Project pro;
private Employee emp; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public Project getPro() {
return pro;
} public void setPro(Project pro) {
this.pro = pro;
} public Employee getEmp() {
return emp;
} public void setEmp(Employee emp) {
this.emp = emp;
}
}

ProEmp.java

 <?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">oracle.jdbc.OracleDriver</property>
<property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
<property name="connection.username">hmy</property>
<property name="connection.password">hmy</property> <!-- SQL dialect SQL方言-->
<property name="dialect">org.hibernate.dialect.Oracle10gDialect</property> <!-- Echo all executed SQL to stdout 控制台显示-->
<property name="show_sql">true</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- 是否格式化 -->
<property name="format_sql">true</property> <!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">create</property> <!-- <mapping resource="cn/happy/entity/Student.hbm.xml" /> -->
<!-- <mapping resource="cn/happy/entity/grade.hbm.xml" /> -->
<!-- <mapping class="cn.happy.entity.Grade"/> -->
<!-- <mapping resource="cn/happy/entity/Dept.hbm.xml" />
<mapping resource="cn/happy/entity/Emp.hbm.xml" /> -->
<mapping resource="cn/happy/entity/Employee.hbm.xml" />
<mapping resource="cn/happy/entity/Project.hbm.xml" /> <!-- <mapping resource="cn/happy/entitys/Employee.hbm.xml" />
<mapping resource="cn/happy/entitys/Project.hbm.xml" />
<mapping resource="cn/happy/entitys/ProEmp.hbm.xml" /> --> </session-factory> </hibernate-configuration>

hibernate.hbm.xml

 package cn.happy.ui;

 import org.hibernate.Session;
import org.hibernate.Transaction; import cn.happy.entity.Employee;
import cn.happy.entity.Project;
import cn.happy.util.HibernateUtil; public class Test3 {
public static void main(String[] args) {
select();
} /**
* 检索
* */
public static void select(){
Session session = HibernateUtil.currentSession();
Project pro = (Project)session.load(Project.class, 1);
for (Employee item : pro.getEmployeses()) {
System.out.println("员工:"+item.getEmpname()+"\t参加的项目:");
for (Project project : item.getProjects()) {
System.out.println(project.getProname());
}
}
HibernateUtil.closeSession();
} /**
* 添加
* */
public static void one(){
Session session = HibernateUtil.currentSession();
Transaction tx = session.beginTransaction(); Project pro=new Project();
pro.setProname("ADO"); Employee emp=new Employee();
emp.setEmpname("范子阳");
Employee emp2=new Employee();
emp2.setEmpname("李夏鹏"); pro.getEmployeses().add(emp);
pro.getEmployeses().add(emp2); //未声明级联
//emp.getProjects().add(pro);
//emp2.getProjects().add(pro); session.save(pro); tx.commit();
HibernateUtil.closeSession();
}
}

测试类

2.建立多对多双向关联 拆成两个一对多

 package cn.happy.entitys;

 import java.util.HashSet;
import java.util.Set; public class Employee {
private Integer empid;
private String empname;
private Set<ProEmp> emps = new HashSet<ProEmp>(); public Set<ProEmp> getEmps() {
return emps;
} public void setEmps(Set<ProEmp> emps) {
this.emps = emps;
} public Integer getEmpid() {
return empid;
} public void setEmpid(Integer empid) {
this.empid = empid;
} public String getEmpname() {
return empname;
} public void setEmpname(String empname) {
this.empname = empname;
} public Set<ProEmp> getProjects() {
return projects;
} public void setProjects(Set<ProEmp> projects) {
this.projects = projects;
} private Set<ProEmp> projects = new HashSet<ProEmp>();
}

Employee.java

 <?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.happy.entitys"> <class name="Employee" table="EMPLOYEE">
<id name="empid" column="EMPID">
<generator class="sequence">
<param name="sequence">STU_SID</param>
</generator>
</id> </class> </hibernate-mapping>

Employee.hbm.xml

 package cn.happy.entitys;

 import java.util.Set;

 public class Project {
private Integer proid;
private String proname;
private Set<ProEmp> pros;//为中间关系表所对应的实体类的类型
public Integer getProid() {
return proid;
}
public Set<ProEmp> getPros() {
return pros;
}
public void setPros(Set<ProEmp> pros) {
this.pros = pros;
}
public void setProid(Integer proid) {
this.proid = proid;
}
public String getProname() {
return proname;
}
public void setProname(String proname) {
this.proname = proname;
}
}

Project.java

 <?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.happy.entitys"> <class name="Project" table="PROJECT">
<id name="proid" column="PROID">
<generator class="sequence">
<param name="sequence">STU_SID</param>
</generator>
</id>
<property name="proname" type="string" column="PRONAME"></property> </class> </hibernate-mapping>

Project.hbm.xml

 package cn.happy.entitys;

 public class ProEmp {
private Integer id;
private Project pro;
private Employee emp; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public Project getPro() {
return pro;
} public void setPro(Project pro) {
this.pro = pro;
} public Employee getEmp() {
return emp;
} public void setEmp(Employee emp) {
this.emp = emp;
}
}

ProEmp.java

 <?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.happy.entitys"> <class name="ProEmp" table="PROEMP">
<id name="id" column="ID">
<generator class="sequence">
<param name="sequence">STU_SID</param>
</generator>
</id> <many-to-one name="emp" class="Employee" column="empid"></many-to-one>
<many-to-one name="pro" class="Project" column="proid"></many-to-one>
</class> </hibernate-mapping>

ProEmp.hbm.xml

 <?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">oracle.jdbc.OracleDriver</property>
<property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
<property name="connection.username">hmy</property>
<property name="connection.password">hmy</property> <!-- SQL dialect SQL方言-->
<property name="dialect">org.hibernate.dialect.Oracle10gDialect</property> <!-- Echo all executed SQL to stdout 控制台显示-->
<property name="show_sql">true</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- 是否格式化 -->
<property name="format_sql">true</property> <!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">create</property> <!-- <mapping resource="cn/happy/entity/Student.hbm.xml" /> -->
<!-- <mapping resource="cn/happy/entity/grade.hbm.xml" /> -->
<!-- <mapping class="cn.happy.entity.Grade"/> -->
<!-- <mapping resource="cn/happy/entity/Dept.hbm.xml" />
<mapping resource="cn/happy/entity/Emp.hbm.xml" /> -->
<!-- <mapping resource="cn/happy/entity/Employee.hbm.xml" />
<mapping resource="cn/happy/entity/Project.hbm.xml" /> --> <mapping resource="cn/happy/entitys/Employee.hbm.xml" />
<mapping resource="cn/happy/entitys/Project.hbm.xml" />
<mapping resource="cn/happy/entitys/ProEmp.hbm.xml" /> </session-factory> </hibernate-configuration>

Hinernate.hbm.xml

 package cn.happy.ui;

 import org.hibernate.Session;
import org.hibernate.Transaction; import cn.happy.entitys.Employee;
import cn.happy.entitys.ProEmp;
import cn.happy.entitys.Project;
import cn.happy.util.HibernateUtil; public class Test4 {
public static void main(String[] args) {
test();
}
public static void test(){
Session session = HibernateUtil.currentSession();
Transaction tx = session.beginTransaction(); Project pro=new Project();
pro.setProname("ADO"); Employee emp=new Employee();
emp.setEmpname("范子阳"); ProEmp proemp=new ProEmp();
proemp.setEmp(emp);
proemp.setPro(pro); session.save(proemp);
session.save(emp);
session.save(pro); tx.commit();
HibernateUtil.closeSession();
} }

测试类

Hibernate中双向多对多的两种配置方式的更多相关文章

  1. hibernate 一对一 one to one的两种配置方式

    hibernate中one-to-one两种配置方式 标签: hibernateHibernateone-to-one 2013-02-19 17:44 11445人阅读 评论(1) 收藏 举报  分 ...

  2. IOC容器在web容器中初始化——(一)两种配置方式

    参考文章http://blog.csdn.net/liuganggao/article/details/44083817,http://blog.csdn.net/u013185616/article ...

  3. Ajax中的get和post两种请求方式的异同

    Ajax中我们经常用到get和post请求.那么什么时候用get请求,什么时候用post方式请求呢? 在做回答前我们首先要了解get和post的区别.   1. get是把参数数据队列加到提交表单的A ...

  4. MyBatis中主键回填的两种实现方式

    主键回填其实是一个非常常见的需求,特别是在数据添加的过程中,我们经常需要添加完数据之后,需要获取刚刚添加的数据 id,无论是 Jdbc 还是各种各样的数据库框架都对此提供了相关的支持,本文我就来和和大 ...

  5. 转:Ajax中的get和post两种请求方式的异同

    1. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到.post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML ...

  6. C#中迭代器的概念和两种实现方式

    1.首先我们看下IEnumerable接口定义:   namespace System.Collections    {        // Summary:        //     Expose ...

  7. 在k8s中部署前后端分离项目进行访问的两种配置方式

    第一种方式 (1) nginx配置中只写前端项目的/根路径配置 前端项目使用的Dockerfile文件内容 把前端项目编译后生成的dist文件夹放在nginx的html默认目录下,浏览器访问前端项目时 ...

  8. 第四节:框架前期准备篇之进程外Session的两种配置方式

    一. 基本介绍 1. 背景:Asp.Net默认的Session机制是进程内,存储在服务器端内存中,有这么几个缺点: ①:既然存在内存中,空间有限,不能存储大数据量信息,数据量多的话Session会被挤 ...

  9. springboot之jackson的两种配置方式

    springboot 针对jackson是自动化配置的,如果需要修改,有两种方式: 方式一:通过application.yml 配置属性说明:## spring.jackson.date-format ...

随机推荐

  1. MyCat实现数据库与数据库之间的读写分离

    一.Mycat的安装准备: 1.jdk:要求jdk必须是1.7及以上版本 2.Mysql:推荐mysql是5.5以上版本 3.Mycat: Mycat的官方网站: http://www.mycat.o ...

  2. ajax 传递文件成功时 jQuery提示parsererror错误

    后台返回值类型 改为:PrintWriter out = response.getWriter();String jsonStr = "{\"success\":\&qu ...

  3. C++基础 namespace register bool

    1. namespace (1)命令空间 C中的命名空间 在C中只有一个全局作用域 C语言中所有全局标识符共享同一个作用域 标识符之间可能发生冲突 C++中提出了命名空间的概念 命令空间将全局作用域分 ...

  4. vue 组件轮播联动

    组件轮播联动我使用的是 el-carousel 组件,具体代码如下: <el-carousel trigger="click" :interval="3000&qu ...

  5. salt demo 环境

    demo 环境 安装 virtualBox和vagrant 安装工具包:virtualBox, vagrant 下载 https://github.com/UtahDave/salt-vagrant- ...

  6. 安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(二)

    本文导航 -7. 安装 PHP0 -8. 安装 MariaDB 数据库 -9. 安装和配置 SSH 服务器 -10. 安装 GCC (GNU 编译器集) -11. 安装 Java 7. 安装 PHP ...

  7. centos使用--防火墙

    目录 1 切换到zsh 1.1 查看系统当前的shell 1.2 查看bin下是否有zsh包 1.3 安装zsh包 1.4 切换shell至zsh 2 安装oh-my-zsh 2.1 oh-my-zs ...

  8. 【转】Git命令解说

    3.12. Git branch  3.12.1. 总述  当第一次执行git init时,系统就会创建一个名为“master”的分支. 而其它分支则通过手工创建.  下面列举一些常见的分支策略:  ...

  9. 使用Subversion进行源代码管理(二):创建和发布版本库[转]

    原文出处: http://www.blogjava.net/youxia/archive/2007/10/23/155372.html 我的上一篇随笔讲了怎么使用Subversion客户端去连接服务器 ...

  10. ARC下还会存在内存泄露吗?

    1.第三方框架不正当使用.2.block,delegate,NSTimer循环使用.3.非oc对象的内存处理.4.地图类处理.5.大次数循环内存暴涨. 非oc对象的释放: 例如使用CGImageRel ...