Hibernate多对多关系(源码)
链接:http://pan.baidu.com/s/1bo0fI27 密码:4e3p
1.所依赖的包
建表语句
Hibernate多对多映射
一个项目可以由多个员工参与开发
一个员工同时参与开发多个项目
<many-to-many></many-to-many>
多对多关联可以使用<set> 元素 和<many-to-many>元素进行配置
多对多关联关系一般采用中间表的形式,新增一张包含关联双方主键的 多对多关联关系一般采用中间表的形式,
新增一张包含关联双方主键的关联表
create table project(
proid int primary key,
proname varcahr(20) not null
);
create table employee(
empid int primary key,
empname varcahr(20)
);
外键
create table proemp(
rproid int,
rempid int
);
添加外键约束
alter table proemp add constraint fk_rproid foreign
key (rproid ) references project(proid);
alter table proemp add constraint fk_rempind foreign
key (rempid) references employee(empid)
2.HibernateUtil.java(工具包)
package com.imooc.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static SessionFactory sessionFactory;
private static Session session;
static {
// 创建Configuration对象,读取hibernate.cfg.xml文件,完成初始化
Configuration config = new Configuration().configure();
StandardServiceRegistryBuilder ssrb = new StandardServiceRegistryBuilder()
.applySettings(config.getProperties());
StandardServiceRegistry ssr=ssrb.build();
sessionFactory=config.buildSessionFactory(ssr);
}
//获取SessionFactory
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
//获取Session
public static Session getSession(){
session=sessionFactory.openSession();
return session;
}
//关闭Session
public static void closeSession(Session session){
if(session!=null){
session.close();
}
}
}
2.员工类
package com.imooc.entity;
import java.util.HashSet;
import java.util.Set;
/*
* 员工类
*/
public class Employee {
private int empid;
private String empname;
// 添加一个项目的集合
private Set<Project> projects = new HashSet<Project>();
public Employee(int empid, String empname) {
super();
this.empid = empid;
this.empname = empname;
}
public Employee(int empid, String empname, Set<Project> projects) {
super();
this.empid = empid;
this.empname = empname;
this.projects = projects;
}
public Employee() {
super();
}
public int getEmpid() {
return empid;
}
public void setEmpid(int empid) {
this.empid = empid;
}
public String getEmpname() {
return empname;
}
public void setEmpname(String empname) {
this.empname = empname;
}
public Set<Project> getProjects() {
return projects;
}
public void setProjects(Set<Project> projects) {
this.projects = projects;
}
}
3项目类
package com.imooc.entity;
import java.util.HashSet;
import java.util.Set;
/*
* 项目类
*/
public class Project {
private int proid;
private String proname;
// 添加一个员工的集合
private Set<Employee> employees = new HashSet<Employee>();
public Project(int proid, String proname) {
super();
this.proid = proid;
this.proname = proname;
}
public Project(int proid, String proname, Set<Employee> employees) {
super();
this.proid = proid;
this.proname = proname;
this.employees = employees;
}
public Project() {
super();
}
public int getProid() {
return proid;
}
public void setProid(int proid) {
this.proid = proid;
}
public String getProname() {
return proname;
}
public void setProname(String proname) {
this.proname = proname;
}
public Set<Employee> getEmployees() {
return employees;
}
public void setEmployees(Set<Employee> employees) {
this.employees = employees;
}
}
4关系Employee.hbm.xml
<?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>
<class name="com.imooc.entity.Employee" table="employee">
<id name="empid" column="empid" type="java.lang.Integer">
<generator class="assigned"></generator>
</id>
<property name="empname" type="java.lang.String">
<column name="empname" length="20" not-null="true"></column>
</property>
<!-- 配置多对多关联关系 -->
<set name="projects" table="proemp" inverse="true">
<key column="rempid"></key>
<many-to-many class="com.imooc.entity.Project" column="rproid"></many-to-many>
</set>
</class>
</hibernate-mapping>
5Project.hbm.xml
<?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>
<class name="com.imooc.entity.Project" table="project">
<id name="proid" column="proid" type="java.lang.Integer">
<generator class="assigned"></generator>
</id>
<property name="proname" type="java.lang.String">
<column name="proname" length="20" not-null="true"></column>
</property>
<!-- 配置多对多关联关系 -->
<set name="employees" table="proemp" cascade="all">
<key column="rproid"></key>
<many-to-many class="com.imooc.entity.Employee" column="rempid"></many-to-many>
</set>
</class>
</hibernate-mapping>