天天看點

外鍵映射

把對象間的關系映射到DB表鍵的外鍵引用

對象之間可以通過對象引用來互相直接通路.

運作機制

關鍵是辨別域.

一對一的關聯.使用一個DB的外鍵取代.

一對多的對象集合.

不能在DB中把相連的對象集合都儲存了.

必須颠倒引用的方向

一張唱片有多個曲目,那麼在曲目表中儲存唱片的外鍵.

更新時較為麻煩

插入和删除

在多的一方(曲目)是依賴映射時(隻能被唱片所擁有,而不能被其它處引用).

容易實作.删除與唱片相連的所有曲目,再把唱片中所有目前曲目記錄插入進來.

加入一個向後指針

為了讓關聯雙向化.在曲目上加入一個指向唱片的連結.

改變了對象模型,可以以處理單值域的技術來處理更新.

進行一次區分

通過資料庫的目前狀态區分.

從DB中重讀(曲目)對象集合,并與從唱片中讀取出的(曲目)集合比較.得出需要删除和儲存的新曲目.

通過第一次讀取的資料區分.

首次讀取後,儲存結果集.避免了另一次的DB讀取.

但是,當使用了樂觀離線鎖時,還是需要通過資料庫的目前狀态來區分.

要加入到對象集合中的項目.

需要首先檢查它是否是新對象.如果是,先将其儲存到DB中.如果不是,在DB中查找到它,更新其外鍵值來指向目前的唱片.

移出記錄

情況

移到另外的唱片中去了.

已經沒有唱片與之對應了.置外鍵為空.

已經被删除了.

連結中的循環

使用包含完整構造資料的構造方法.并在合适的位置上放置延遲加載來打破循環.

建立空對象,并立刻把它們放到一個辨別映射中.當産生循環時,該空對象會被加載,循環會被終止.

使用時機

不适用于多對多的關聯.外鍵是單值的.此時使用關聯表映射.

如果關聯對象是值對象,那麼使用嵌入值.