【Hibernate】——多对一关联映射

来源:互联网 发布:光盘打印软件 编辑:程序博客网 时间:2024/09/21 09:00
              在了解了hibernate基本映射机制之后,很好的就会切入到多对一映射当中。多对一关联映射最重要的标签是<many-to-one>.

              Hibernate的多对一关联映射实现的基本原理就是:在多的一端加入一个外键,指向一的一端,映射完成之后使得加载多的一端数据的同时能把关联的一的一端的数据加载上来。

两个类实现多对一的关联映射的步骤

User作为多的一端:

public class User {      private int id;         private String name;      private Group group;            public int getId() {             return id;      }      public void setId(int id) {             this. id = id;      }      public String getName() {             return name;      }      public void setName(String name) {             this. name = name;      }      public Group getGroup() {             return group;      }      public void setGroup(Group group) {             this. group = group;      }}

Group作为一的一端:

public class Group {      private int id;            private String name;      public int getId() {             return id;      }      public void setId(int id) {             this. id = id;      }      public String getName() {             return name;      }      public void setName(String name) {             this. name = name;      }}

映射文件:
Group:
<hibernate-mapping>      <class name ="com.bjpowernode.hibernate.Group" table= "t_group">             <id name ="id">                   <generator class ="native"/>             </id >             <property name ="name"/>       </class ></hibernate-mapping>

User:
<hibernate-mapping>      <class name ="com.bjpowernode.hibernate.User" table= "t_user">             <id name ="id">                   <generator class ="native"/>             </id >             <property name ="name"/>             <many-to-one name ="group" column="groupid" cascade= "save-update"/>      </class ></hibernate-mapping>

              同时不要忘了在hibernate的核心配置文件hibernate.cfg.xml中引入这两个映射文件。
<mapping resource= "com/bjpowernode/hibernate/User.hbm.xml" /><mapping resource= "com/bjpowernode/hibernate/Group.hbm.xml" />
              从两个映射文件可以看出,多对一的关联映射只需要在多的一端配置一个<many-to-one>标签就可以了,如User类的配置成的表得groupid指向一的一端的外键。

注意:

              User是多的一端,Group是一的一端,所以保存数据时,需要先保存Group,让Transient状态的Group对象变成Persisent状态,才能保存User,因为只有Group变成了Persistent状态之后User对象才能获取到Group的主键作为外键关联,Persistent状态的对象不能引用Transient状态的对象。
              或者还可以设置级联操作:在多的一端的<many-to-one>标签设置级联属性:

<many-to-one name ="group" column="groupid" cascade= "save-update"/>
              这样就标识级联保存和级联更新,就不用再显示save(group)了,hibernate会首先保存User的关联对象Group,达到自动保存的效果。

Cascade可以的取值为:
              all:标识所有情况都进行级联操作
              none:不进行级联操作
              save-update:保存或更新时进行级联操作
              delete:级联删除

              级联是对象之间的连锁操作,它只影响添加、删除和修改。因为是多对一,存在外键关联问题,所以需要设置级联属性。而且多对一关联映射只有一种方向。不管是哪种关联,只要分清楚各种不同关联的特殊标签和属性就好。


0 0
原创粉丝点击