標籤:
一對多關聯性可以分為單向和雙向。
一對多關聯性單向
單向就是只能從一方找到另一方,通常是從主控類找到擁有外鍵的類(表)。比如一個母親可以有多個孩子,並且孩子有母親的主鍵作為外鍵。母親與孩子的關係就是一對多的關係。如果想對母親資訊的操作同時也反應在其孩子資訊上那麼可以在母親類設定檔的集合屬性上配置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>標籤
java架構篇---hibernate(一對多)映射關係