员工个部门,站在员工的角度来看,多个员工对应一个部门,是多对一的关系。
表结果如下图所示:
departrnent代表部门,employee代表员工,FK1代表外键,depaet_id是departrnent表中id的外键。
编写Departnet类和Employee类:
此类包含两个属性,id和name.
此类包含两个属性,和一个对Department类的引用。对Department持有引用是为了查询到这个员工以后,可以更清楚的知道他所在部门的信息。
然后编写对应的映射文件,Department类对应的映射文件如下:
Employee类对应的映射文件如下:
Employee中的id,name属性的配置和平常的属性配置是一样的,主要是depart这个属性,这个属性是Department的引用,Employee和Department的关系是多对一的关系,所以用到一个标签:<many-to-one>,代表他们之间的属性是多对一的,此标签的name属性就是Employee类中引用的名字,columu代表对应表中的哪一列。这个时候,depart是一个引用,而depart_id从数据库中取出后会是一个值,怎样对应起来的?
是这样的,根据映射可以知道引用depart对应的是哪个类,根据这个类可以找到对应的映射文件,就是Department类的映射文件,根据这个映射文件可以找到Department的主键,默认的hibernate会将dapart_id的值赋值给Department的主键,也就是Department类中的属性id。如果不想把值赋值给Department的主键可以加入属性"property-ref="name",这样的话就会把depart_id的值付给name属性,但是这样做是不提倡的,因为name不是主键,只是一般的属性,不应该和别的表的属性有什么联系。
最后在hibernate文件中注册这两个映射文件。到现在,关系建立完毕。
下面是怎样保存一个Employee和Department: