一个教材上面的例子,
就是项目(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 //这样也可以
}
}
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22259926/viewspace-665104/ ,如需转载,请注明出处,否则将追究法律责任。