首页 > 代码库 > Hibernate映射多对多双向关联关系(小案例)

Hibernate映射多对多双向关联关系(小案例)


 

多对多双向关联关系(Project(工程)/Emp(员工)为案例):

步骤如下:

1、创建Project类,并需要定义集合类型的Emp属性

public class Project {    //编号     private Integer pid;     //名称     private String pname;     //定义集合类型的Emp属性     private Set<Emp> emps=new HashSet<Emp>();     public Integer getPid() {        return pid;    }    public void setPid(Integer pid) {        this.pid = pid;    }    public String getPname() {        return pname;    }    public void setPname(String pname) {        this.pname = pname;    }    public Set<Emp> getEmps() {        return emps;    }    public void setEmps(Set<Emp> emps) {        this.emps = emps;    }

2、创建Emp类,并需要定义集合类型的Project属性

public class Emp {    private  String empname;    private  Integer nid;    private Set<Project> pros=new HashSet<Project>();    public String getEmpname() {        return empname;    }    public void setEmpname(String empname) {        this.empname = empname;    }    public Integer getNid() {        return nid;    }    public void setNid(Integer nid) {        this.nid = nid;    }    public Set<Project> getPros() {        return pros;    }    public void setPros(Set<Project> pros) {        this.pros = pros;    }    }

3、需建立第三张表 关联Project和Emp各自的主键pid、nid

多对多关联关系的实现需要一个连接表,<set>的属性指出的就是连接表的名称,<key>指出连接表参照Project表id的外键的字段名;<many-to-many>中的class指定与Emp多对多关联的类,column指定连接表参照Emp映射表(此处由Emp.hbm.xml映射为Emp表)id的外键的字段名。

技术分享

 

4、编写Project.hbm.xml和Emp.hbm.xml小配置,并植入<set>元素中的table属性 第三张表ProEmp 以及多对多<many-to-many>标签 class指定类型 

Emp.hbm.xml关键代码如下:

技术分享

Project.hbm.xml关键代码如下:

技术分享

5、大配置hibernate.cfg.xml 需关联小配置

<mapping resource="cn/happy/manytomany/Project.hbm.xml" /><mapping resource="cn/happy/manytomany/Emp.hbm.xml" />

6、测试类 Test

/*     * 多对多 双向     */        @Test    public void addTest(){                //创建员工对象             Emp emp=new Emp();             emp.setEmpname("未知");             //创建工程对象             Project pro=new Project();             pro.setPname("花园");                          //将员工对象添加到工程  反之 同理             pro.getEmps().add(emp);             emp.getPros().add(pro);                          //保存             session.save(pro);             session.save(emp);                                        }

注:对于双向多对多关联,需要将其中一端inverse属性设为True,否则违反约束条件。


 

Hibernate映射多对多双向关联关系(小案例)