Hibernate映射多对多双向关联关系(小案例)
Posted Beyondづ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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映射多对多双向关联关系(小案例)的主要内容,如果未能解决你的问题,请参考以下文章
Hibernate—— 一对多 和 多对多关联关系映射(xml和注解)总结(转载)