一對多關系可以分為單向和雙向。
一對多關系單向單向就是只能從一方找到另一方,通常是從主控類找到擁有外鍵的類(表)。比如一個母親可以有多個孩子,并且孩子有母親的主鍵作為外鍵。母親與孩子的關系就是一對多的關系。如果想對母親信息的操作同時也反應在其孩子信息上那么可以在母親類配置文件的集合屬性上配置cascade="all",表示對關聯實體進行級聯更新配置。
“主”端: 多的一端
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.java1234.model"> <class name="Student" table="t_student"> <id name="id" column="stuId"> <generator class="native"></generator> </id> <!-- 多的一端// column 數據中的別名 cascade 表示級聯關系 通常用在多對一 ,和多對多的映射中 --> <PRoperty name="name"></property> <many-to-one name="c" class="com.java1234.model.Clazz" column="ClazzId"></many-to-one> </class></hibernate-mapping>
一的一端:
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.java1234.model"> <class name="Clazz" table="t_clazz"> <id name="id" > <generator class="native"></generator> </id> <property name="name" column="clazzName"></property> </class></hibernate-mapping>
一對多單向映射:多對一的映射關系是在多的一端進行維護的,一對多關系映射則由一端來維護這種關系。
“主”端:一的一端來維護這種關系 ,用set標簽 在t_student的表中添加字段ClazzId來進行關聯。
一對多關聯映射利用了多對一關聯映射原理:
多對一關聯映射:在多的一端加入外鍵指向一的一端,他維護的關系是多指向一
一對多關聯映射: 在多的一端加入外鍵指向一的一端,它維護的關系是一指向多
也就是說一對多和多對一的映射策略是一樣的,只是站的角度不同。
在一的一端維護的關系的缺點: 如果經t_student 表里面的clazzId 字段設為非空,則無法保存。
一對多雙向一對多雙向。在雙向關聯時每個Student都有一個clazz的引用,所以在配置clazz.hbm.xml文件時有些不同
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.java1234.model"> <class name="Clazz" table="t_clazz"> <id name="id" column="clazzId"> <generator class="native"></generator> </id> <property name="name" column="className"></property> <set name="students" cascade="all" inverse="true"> <!-- cascade 有五個選項 分別是:all ,delete ,none,save-update,delete-orphan ; all : 所有情況下均進行關聯操作。 none:所有情況下均不進行關聯操作。這是默認值。 save-update:在執行save/update/saveOrUpdate時進行關聯操作。 delete:在執行delete時進行關聯操作。 delete-orphan: 當save/update/saveOrUpdate時,相當于save-update ;當刪除操作時,相當于delete ; --> <key column="clazzId"></key> <one-to-many class="com.java1234.model.Student" /> </set> </class></hibernate-mapping>
在一一端的集合上使用<set>,在對方表中加入一個外鍵指向一一端。
在多的一端要采用<many-to-one>標簽
新聞熱點
疑難解答