1. 程式人生 > >【java】xxx.hbm.xml檔案中的many-to-one和one-to-many理解

【java】xxx.hbm.xml檔案中的many-to-one和one-to-many理解

一、前言

      在前幾天中自己在學習ssh的過程中,發現Hibernate需要配置一個名字叫xxx.hbm.xml的檔案,這個檔案主要是使用Hibernate對映到相應的表。自然在這個檔案裡面會有表中相應的欄位的名字的對映,這些就很好解決了,但是要有外來鍵關聯的話,就要新增many-to-one和one-to-many了,剛開始的時候小編也是模稜兩可,所以通過部落格來總結一下。

二、說說ER圖中的一對多和多對一

      說到資料庫的設計就不可避免的使用ER圖了,關於ER圖小編粗略的向大家講解一下。請看下面的這張ER圖:


ER
                                                    圖一 ER 圖例項

      E-R圖也稱實體-聯絡圖(Entity Relationship Diagram),提供了表示實體型別、屬性和聯絡的方法,用來描述現實世界的概念模型。

      它是描述現實世界概念結構模型的有效方法。是表示概念模型的一種方式,在ER圖中有如下四個成分:

  • 矩形框:表示實體,在框中記入實體名。

  • 菱形框:表示聯絡,在框中記入聯絡名。

  • 橢圓形框:表示實體或聯絡的屬性,將屬性名記入框中。對於主屬性名,則在其名稱下劃一下劃線。

  • 連線:實體與屬性之間;實體與聯絡之間;聯絡與屬性之間用直線相連,並在直線上標註聯絡的型別。(對於一對一聯絡,要在兩個實體連線方向各寫1; 對於一對多聯絡,要在一的一方寫1,多的一方寫N;對於多對多關係,則要在兩個實體連線方向各寫N,M。)

      這裡小編重點指一下實體之間的關係,比如圖中的管理員和欄目,一個管理員可以管理多個欄目,而一個欄目只可以有一個管理員管理,所以他們之間的關係是1:N。同理,如果一個管理員可以管理多個欄目,而一個欄目也可以由多個管理員管理,那麼他們之間的關係就是N:M;

三、many-to-one和one-to-many

      前面說完了ER圖,相信大家會對資料庫之間的關係有了更加深刻的瞭解,下面轉入正題,首先看一下專案中資料庫的關係圖:


資料庫關係圖
                                                    圖二 資料庫關係圖

      在資料庫關係圖中可以看出,訂單表和商品之間是多對多的關心,所以產生了第三張表訂單項,訂單表和訂單項表之間的關係是1:N的。如果使用了Hibernate的話,就要在xxx.hbm.xml檔案中新增對映語句,下面小編就向大家展示一下如何做到對映:

<?xml version="1.0" encoding="UTF-8"?>
<!-- 引入相關的約束-Ares-2016年11月21日21:49:11 -->
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">


<!-- 使用Hibernate對映到相應的表-Ares-2016年11月21日21:50:46  -->

<hibernate-mapping>
    <class name="cn.itcast.shop.order.vo.Order" table ="orders">
        <!-- 表的主鍵-Ares-2016年11月21日22:07:31 -->
        <id name = "oid">
            <!-- 生成器-增長策略-自動生成-Ares-2016年11月21日21:55:03 -->
            <generator class="native"/>
        </id>
        <!-- 配置其他普通屬性-Ares-2016年11月21日21:55:55 -->
        <property name="total"/>
        <property name="ordertime"/>
        <property name="state"/>
        <property name="name"/>
        <property name="addr"/>
        <property name="phone"/>


        <!-- 關聯關係:與使用者-Ares-2016年11月21日21:57:32 -->
        <!-- 一個使用者有多個訂單-訂單一方是多個-many to one -Ares-2016年11月21日21:58:06 -->
        <!-- name 對應的關係名  class 外來鍵對應的完全路徑名  column 外表的主鍵-Ares -2016年11月21日22:01:10 -->
        <many-to-one name="user" lazy="false" class="cn.itcast.shop.user.vo.User" column="uid"/>

        <!-- 關聯關係:與訂單項-Ares-2016年11月21日21:57:32 -->
        <!-- 一個訂單裡面可以包含多個訂單項-訂單為一個-one to many -Ares -2016年11月21日22:02:56 -->
        <!-- 級聯儲存-cascade="save-update"-不用依次級聯-Ares-2016年11月25日22:23:59 -->
        <set name="orderItems" lazy="false" cascade="save-update">
            <key column="oid"/>
            <one-to-many class="cn.itcast.shop.order.vo.OrderItem"/>
        </set>


    </class>

</hibernate-mapping>

      欄位說明:

  • < hibernate-mapping > 元素:物件-關係對映檔案的根元素,其他元素必須嵌入在< hibernate-mapping >元素之內。

  • < class >元素:< class >用於新增持久化類。

  • < id >元素:設定持久化類中定義的對應資料庫表主鍵欄位的屬性到資料庫表字段的對映。

  • < property >元素:設定持久化類的屬性和資料庫表的欄位的對映。

      核心欄位說明完了,我們說說實體關聯對映:

test
                                                    圖三 對應關係類圖

      類圖說明:

    一個房間可以有0個或多個使用者使用,但是一個使用者只能使用一個房間。

一對多單向關聯關係

      思路:在“多”的一端加入一個外來鍵指向“一”的一端,維護關係是“一”指向“多”。

      由於房間和使用者是1對多,所以要在房間所對應的xxx.hbm.xml檔案中新增一對多的對映:

        <set name="user" >
            <key column="user_id"/>   //外來鍵,即user表的主鍵
            <one-to-many class="user"/>  //要對映的表的名字
        </set>

多對一單向關聯關係

      思路:在“多”的一端加入一個外來鍵指向“一”的一端,維護的關係是“多”指向“一”。

      同理由於使用者和房間是多對一,所以也要在使用者所對應的xxx.hbm.xml檔案中新增多對一的對映:

//lazy: 延遲載入
//class:room類的全路徑
//column:room類的主鍵
<many-to-one name="room" lazy="false" class="room" column="room_id"/>

四、小結

      總之不要放過任何一個細節,前天李爽師姐去面試,面試官就問的這個問題,多以還是要提起自己的細心的。加油!

相關推薦

javaxxx.hbm.xml檔案many-to-oneone-to-many理解

一、前言       在前幾天中自己在學習ssh的過程中,發現Hibernate需要配置一個名字叫xxx.hbm.xml的檔案,這個檔案主要是使用Hibernate對映到相應的表。自然在這個檔案裡面會

javajdom生成xml檔案

上篇介紹了jdom解析xml檔案。這篇就介紹jdom生成xml。這樣就會對jdom操作xml有一個徹底的瞭解了。一個是正向解析,另一個是方向生成。 package com.rthb.test; import java.io.FileNotFoundException; i

java 一個讀取配置檔案的類

/** * <p>Title:InitConfig.java</p> * <p>Description:</p> * @author songrongkai * @date 2018年7月29日 * @version 1.0 */ p

Linux命令寫在檔案並呼叫awk -f

我們在使用awk命令的時候,有時候命令特別長,在終端寫出來格式太亂,難以閱讀,以下是一個將命令寫在檔案中,並使用awk呼叫的具體案例 1.現在有檔案file3.txt,內容如下: 2.ak2.awk指令碼 #列印標題並格式化打印出數量合計 BEGIN { FS="\t" #設定欄位分割符

120TensorFlow 從CSV檔案讀取資料並訓練線性迴歸模型(面向新手)

正文開始。 學習 TensorFlow 讓我的思維發生了變化。 計算機本質上是一種數學的工具,而我在學習程式設計的時候,思維也不可避免地收到了影響。傳統的程式設計思想,常常認為程式就應該像數學定理或者數學函式一樣,給出一個確定的結果。這是一種基於邏輯推導

javaHttpClient實現HTTP檔案通用下載工具類

package com.imopan.cps.apart.api.util; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import org.apa

資料集在批量xml標籤選出指定標籤對應圖片

1.博主從朋友那裡拿了一個VOC資料集,裡面有20個類,博主只要6個 classes={"one","two","three","four","five","fist"} 2.選出來後把對應圖片也找出來 # coding=utf-8 """選出指定標籤的xml檔案""" #"""選出對應

Androidpull解析xml檔案+將資料儲存為xml格式,並儲存在記憶體裡

在解析中,常用到的還有一種解析就是pull去解析xml格式的檔案。事實上android內部也是這樣做的。今天這個demo是來自傳智播客,可能技術已經被翻新了。 但是基礎原理還是那樣,希望基礎學習者,能夠理解,並實際寫一寫。 首先在src目錄下匯入我們將要解析的xml檔案:

JAVAapache poi excel 檔案讀取,各種資料型別,不規則excel格式都可以讀取

本文將通過例項來介紹apache poi  讀取excel的原理,包括各種資料型別的處理,本文提供的程式碼非常通用,即使不規則的excel檔案,也可以讀取。 直接看程式碼吧 package poi.excel; import java.io.File; import j

Android安卓佈局檔案xmlns屬性

定義及使用 xmlns是XML Namespaces的縮寫,中文名稱是XML(標準通用標記語言的子集)名稱空間 自定義View的時候有時候會在佈局檔案中使用到 命名規則如下: xmlns:字首=http://shemas.android.com/ap

Javaitext根據模板生成pdf(包括圖片表格)

金額 res report als fields positions 創建模板 bst open() 1、導入需要的jar包:itext-asian-5.2.0.jar itextpdf-5.5.11.jar。 2、新建word文檔,創建模板,將文件另存為pdf,並用Ado

java面向物件程式設計——類與物件的繼承多型

一、程式碼塊 程式碼塊定義:使用 {} 定義的一段程式碼。 根據程式碼塊定義的位置以及關鍵字,又可分為以下四種: 普通程式碼塊(定義在方法中,除錯) 構造塊(定義在類中的(不加修飾符)) 靜態塊 同步程式碼塊 構造塊 構造塊在每次產生一個新的物件就呼叫一次構

C#C#操作XML方法:新增、修改刪除節點與屬性

 一 前言 先來了解下操作XML所涉及到的幾個類及之間的關係  如果大家發現少寫了一些常用的方法,麻煩在評論中指出,我一定會補上的!謝謝大家 * 1 XMLElement 主要是針對節點的一些屬性進行操作 * 2 XMLDocument 主要是針對節點的CUID操作 *

C++函式引數傳遞的一級指標二級指標**

主要內容: 1、一級指標和二級指標 2、函式指標傳遞的例子 3、什麼時候需要傳遞二級指標? 4、二級指標在連結串列中的使用 1、一級指標和二級指標 一級指標:即我們一般說的指標,就是記憶體地址; 二級指標:指向指標的指標,就是

Javai++與++i的不同,從底層效率上比較

以前書本、視訊和網站上但到i++和++i的區別,都是簡單,兩句話。 i++,先運算,後賦值 ++i,先賦值,後運算 舉個例子:(Java語言) int i = 1; System.out.print(i++); int j

系列EOS開發4 EOS賬戶、錢包密鑰的關系

執行 2個 通過 合約 默認 分享圖片 iss 新的 分享 EOS對於賬戶的設計與ETH有很大的不同,引入了Account賬戶, Wallet錢包, 錢包密碼, Key公私鑰, Permission權限等眾多概念,剛入門的時候感覺一頭霧水。本文希望通過對這些概念的梳理,幫助

javaxml檔案表建立及讀取環境搭建並採用DOM4J完成XML檔案匯入到資料庫

    java一種簡單的解析xml方法是用DOM進行解析, dom4j是一個Java的XML API,類似於jdom,用來讀寫XML檔案的,dom4j用於處理xml是很常用的技術,本篇部落格介紹xml檔案表建立及讀取環境搭建並採用DOM4J完成XML檔案匯入到資料庫。

常用積累xml檔案,出現Failed to read schema document問題解決

    專案匯入到新的環境或者開發工具當中時,有時xml檔案出現了Failed to read ***.xsd檔案的錯誤,這種宣告類檔案,通常在解析xml檔案過程中,按順序載入。載入過程中,根據xml檔案給定的url路徑,進行下載。但這種xsd宣告檔案,並不都是從網上下載的,

MyBatis學習05SqlMapConfig.xml檔案的配置總結

  經過上兩篇博文的總結,對mybatis中的dao開發方法和流程基本掌握了,這一節主要來總結一下mybatis中的全域性配置檔案SqlMapConfig.xml在開發中的一些常用配置,首先看一下該全域性配置檔案中都有哪些可以配置的東西: 配置內容 作用 <

hibernate的對映檔案xxx.hbm.xml詳解總結

      (1).name: 為當前對映檔案指定對應的持久類名         (2).table: 為當前對映檔案指定對應的資料庫表名          (3).schema: 設定當前指定的持久類對應的資料庫表的schema名          (4).catalog: 設定當前指定的持久類對應的資料