ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 一个多对多例子,HIbernate,many-to-many

一个多对多例子,HIbernate,many-to-many

原创 Linux操作系统 作者:张国平 时间:2010-06-12 15:48:17 0 删除 编辑

一个教材上面的例子,

就是项目(project)和人员(employee)的关系,其中项目有多个人员,一个人也可以参加多个项目,是一个典型多对多关系。

1、数据库关系图如下,应该可以一目了然了。r_emp_proj是用来记录工程和人员的关系表,由这两个表的主键组成。

2、ORM对应类

r_emp_proj关系表是不用做实体类的,需要给project,和employee做实体类。

除了对应culomn的熟悉,还要加上一个对应对方的Set。

这个是员工类,里面的Projects表示员工参与的工作。

public class Employee implements java.io.Serializable {
 private Long employeeid;
 private String employeename;
 private String employeedesc;
 private Set Projects=new HashSet();
.............setter 和 getter
}

下面这个是工程类,同理了,members表示参与该项目的员工。

public class Project implements java.io.Serializable {
 private Long projectid;
 private String projectname;
 private String projectdesc;
 private Set members=new HashSet();
.......Setter和getter
}
 
hbm.xml的内容
<!-- employee映射信息 -->












class="com.aptech.jb.entity.Project"
column="r_proj_id" />

这个里面inverse="true",表示让Project作为主控。

<!-- project映射信息 -->












class="com.aptech.jb.entity.Employee"
column="r_emp_id" />

cascade设置为save-update,表示Project可以保持和update包括的人员熟悉。

这个里面因为是多对多,如果把inverse="true"放到Project里面,让employee主控,会有不同的结果。所以可以自己尝试下,对于理解级联很有帮助。

 

测试代码简单写写

public void addManyTest(){

 Session se= HibernateSessionFactory.getSession();

  Project p1=new Project();

  p1.setProjectname("怒挤压销售系统");

  Employee e1=new Employee();
  e1.setEmployeename("大树");
  Employee e2=new Employee();
  e2.setEmployeename("二叔");
  Employee e3=new Employee();

  p1.getMembers().add(e1);
  p1.getMembers().add(e2);
 Transcation txs=se.beginTransaction();

  se.save(p1);

 txs.commit();

//se..beginTransaction().commit //这样也可以

   }

 

 

}

1.jpg

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22259926/viewspace-665104/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
SAP 金融风险管理产品专家

注册时间:2009-08-05

  • 博文量
    229
  • 访问量
    635942