首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Hibernate 投射2

2012-09-13 
Hibernate 映射21.2 一对多 即两个表通过外键进行关联,一个部门,多个员工一个学校,多个学生这里的两个表

Hibernate 映射2

1.2 一对多 即两个表通过外键进行关联,一个部门,多个员工;一个学校,多个学生;这里的两个表通过外键关联  public class Department {private int deptid;private String dname;private String location;private Set<Employee> employees=new HashSet<Employee>(); //这里是一个集合 一个部门有多个 员工 即"多"  }  public class Employee {private int empid;private String ename;private Department department;  //而对每个员工来说只有一个部门 即 "一"  }我们先按我们的思路想下配置文件  有一个Department对应{Employee..}也就是many 个Employee 对应一个Department 并且有many个外键<hibernate-mapping package="com.bjsxt.po"><class name="Employee" table="t_employee" ><id name="empid"><generator cascade="all" ><column name="dept_id"></column>  <!-- 这个就是我们前面说到的多个外键--!></many-to-one></class></hibernate-mapping>而Department类中不是有一个set 的集合吗 所以用到set  <hibernate-mapping package="com.bjsxt.po"><class name="Department" table="t_department" ><id name="deptid"><generator cascade="save-update" inverse="false" ><key><column name="dept_id"></column> <!-- 对应employee中的一个列 --!></key><one-to-many /></set></class></hibernate-mapping> 其中cascade  属性和inverse 属性比较重要 cascade 属性是级联的操作,比如我们增加一个员工时同时对该员工的部门设置了值.如果数据库中没有记录.则 强大的Hibernate 会为我们创建表,并添加记录并建立关系。当然这些只是我们上面配置的文件的作用.  cascase = all  进行任何操作时都级联            save-update 保存和更新时            delete 删除时级联           all-delete-orpnan 当被关联对象失去宿主时,将其删除 也就是如果我们把部门删除了,那么员工自然就没有家可回了,会被一并删除  特别注意如果此属性不设置,则会报错inverse 属性 =false =true  表示由哪一方维护外键的值 false是双方都可以维护,true是有多方维护 .true效率高最后,终于要说多对多的情况了 首先我们应该知道,多对多就会产生中间表,而中间表肯定有两个表的字段1.n   public class Student2 {private int id;private String name;private Set courses=new HashSet();  //这里是一个set的集合了, 学生可以有多门课程   }   public class Course {private Long id;private String name;private Set students =new HashSet(); //课程也可以被多个同学选修   }   这里我们假设没有hibernate 帮我们的情况下,我们应该自己建立一个中间表 student_course表中自然有student_id,course_id 如果我们这样想的话。那么配置文件一看就明白 <hibernate-mapping package="com.bjsxt.po"><class name="Student2" table="t_student2" lazy="true"><id name="id"><generator table="stu_course" cascade="save-update"><key column="stuId" /> <!-- key 对应当前表的外键  --!><many-to-many column="courseId" /></set></class> </hibernate-mapping>此时我们应该猜想Course.hbm.xml应该和这个一样,只是一些小小的差别<hibernate-mapping package="com.bjsxt.po"><class name="Course" table="t_course" lazy="true"><id name="id"><generator table="stu_course" cascade="save-update"><key column="courseId" />//t_sourse的外键<many-to-many column="stuId" /></set></class></hibernate-mapping>基础上一些大的我们已经配置完了。当然这些都可以在网上查到。但最少我们应该知道怎么配。

热点排行