日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hibernate中的映射文件xxx.hbm.xml详解总结

發(fā)布時間:2025/3/20 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hibernate中的映射文件xxx.hbm.xml详解总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.Hibernate映射文件的作用:

Hibernate映射文件是Hibernate與數據庫進行持久化的橋梁


二,Hibernate映射文件主要內容:

? ? (1).映射內容的定義:

? ? ? ?Hibernate映射文件由<hibernate-mapping package="JavaBean所在包的全路徑">節(jié)點定義映射內容并指定所對應的JavaBean的位置(也可以不在該節(jié)點中用package屬性指定對應的JavaBean位置,而在該節(jié)點下的class節(jié)點中的name屬性中指定)


? ? (2).數據庫和JavaBean的關聯:

? ? ? Hibernate映射文件中用<hibernate-mapping>節(jié)點下的

? ? ? <class name="JavaBean名稱" table="對應數據庫中的表名">節(jié)點指定數據庫表和JavaBean的關聯。

( 該節(jié)點的父節(jié)點中用package屬性指定了JavaBean的包名時用)/全路徑(該節(jié)點的父節(jié)點中沒用package屬性指定JavaBean的包名時用)


? ? ? (3).主鍵映射:

? ? ? ?在<class >節(jié)點下用

? ? ?<id name="數據庫中主鍵在JavaBean中的屬性名稱" column="數據庫中主鍵名" type="string">節(jié)點映射對應的主鍵,該節(jié)點必須有且只有一個(因為主鍵只有一個),同時必須放在<property ...>節(jié)點前

? ? ? ??

? ? ? ?(4).普通字段映射:

? ? ? ? 在<class ...>節(jié)點下用

? ? ? ? <property name="數據庫中字段在JavaBean中的屬性名稱" column="數據庫中的字段名" type="string"/>節(jié)點映射普通字段,該節(jié)點可有多個(一個字段用一個該節(jié)點來映射) ?

三,heibernate的主鍵映射方式: ?

? ? ? 在<id ...>節(jié)點下用<generator class="映射方式"/>節(jié)點指定Hibernate向數據庫插入數據時主鍵的生成方式

l assigned:應用程序自身對id賦值。當設置<generator class="assigned"/>時,應用程序自身需要負責主鍵id的賦值,由外部程序負責生成(在session.save()之前為對象的主鍵設置值),無需Hibernate參與一般應用在主鍵為自然主鍵時。例如XH為主鍵時,當添加一個學生信息時,就需要程序員自己設置學號的值,這時就需要應用該id生成器

l native:由數據庫對id賦值。當設置<generator class="native"/>時,數據庫負責主鍵id的賦值,最常見的是int型的自增型主鍵。例如,在SQLServer中建立表的id字段為identity,配置了該生成器,程序員就不用為該主鍵設置值,它會自動設置。

l?identity:采用數據庫提供的主鍵生成機制,為long/short/int型列生成唯一標識如SQL ServerMySQL中的自增主鍵生成機制。

l hilo:通過hi/lo算法實現的主鍵生成機制,需要額外的數據庫表保存主鍵生成歷史狀態(tài)。

l seqhilo:與hi/lo類似,通過hi/lo算法實現的主鍵生成機制,只是主鍵歷史狀態(tài)保存在sequence中,適用于支持sequence的數據庫,如Oracle

l increment:主鍵按數值順序遞增。此方式的實現機制為在當前應用實例中維持一個變量,以保存當前的最大值,之后每次需要生成主鍵的時候將此值加1作為主鍵。這種方式可能產生的問題是:如果當前有多個實例訪問同一個數據庫,由于各個實例各自維護主鍵狀態(tài),不同實例可能生成同樣的主鍵,從而造成主鍵重復異常。因此,如果同一個數據庫有多個實例訪問,這種方式應該避免使用

l sequence:采用數據庫提供的sequence機制生成主鍵,用于用序列方式產生主鍵的數據庫(如:Oracle、DB2等的Sequence),用于為long/short/int型列生成唯一標識,如:<generator class="sequence"><param name="sequence">序列名</param></generator>Oracle sequence

l uuid.hex:由Hibernate基于128位唯一值產生算法,根據當前設備IP、時間、JVM啟動時間、內部自增量等4個參數生成十六進制數值(編碼后長度為32位的字符串表示)作為主鍵。即使是在多實例并發(fā)運行的情況下,這種算法在最大程度上保證了產生id的唯一性。當然,重復的概率在理論上依然存在,只是概率比較小。一般而言,利用uuid.hex方式生成主鍵將提供最好的數據插入性能和數據平臺適應性。

l uuid.string:與uuid.hex類似,只是對生成的主鍵進行編碼(長度為16位)。在某些數據庫中可能出現問題。

l foreign:使用外部表的字段作為主鍵。該主鍵一般應用在表與表之間的關系上,會在后面的表對應關系上進一步講解。

l selectHibernate 3新引入的主鍵生成機制,主要針對遺留系統(tǒng)的改造工程。

由于常用的數據庫,如SQLServerMySQL等,都提供了易用的主鍵生成機制(如auto-increase字段),可以在數據庫提供的主鍵生成機制上,采用native生成器來配置主鍵生成方式。


四,映射文件的元素結構和屬性

? ? 1,根元素:<hibernate-mapping>,每一個hbm.xml文件都有唯一的一個根元素,包含一些可選的屬性

<hibernate-mapping package="com.demo.hibernate.beans"><class name="User" ...> </hibernate-mapping><hibernate-mapping><class name="com.demo.hibernate.beans.User" ...> </hibernate-mapping>

? ? ??(1).package: 指定當前映射文件對應的持久類的完整包名(如:package="entity.dao")
? ? ? (2).schema: 指定當前映射文件對應的數據庫表的schema名
? ? ? (3).catalog: 指定當前映射文件對應的數據庫表的catalog名
? ? ? (4).default-cascade: 設置默認的級聯方式(默認值為none)
? ? ? (5).default-access: 設置默認的屬性訪問方式(默認值為property)
? ? ? (6).default-lazy: 設置對沒有指定延遲加載的映射類和集合設定為延遲加載(默認值為true)
? ? ? (7).auto-import: 設置當前映射文件中是否可以在HQL中使用非完整的類名(默認值為true)

? ??hibernate-mapping節(jié)點的字節(jié)點:
? ? ?(1).class: 為當前映射文件指定對應的持久類名和對應的數據庫表名
? ? ?(2).subclass: 指定多態(tài)持久化操作時當前映射文件對應的持久類的子類
? ? ?(3).meta: 設置類或屬性的元數據屬性
? ? ?(4).typedef: 設置新的Hibernate數據類型
? ? ?(5).joined-subclass: 指定當前聯結的子類
? ? ?(6).union-subclass: 指定當前聯結的子類
? ? ?(7).query: 定義一個HQL查詢
? ? ?(8).sql-query: 定義一個SQL查詢
? ? ?(9).filter-def: 指定過濾器

? ? 2,<class>定義類:根元素的子元素,用以定義一個持久化類與數據表的映射關系,如下是該元素包含的一些可選的屬性

? ?? ?(1).name: 為當前映射文件指定對應的持久類名
? ? ?
? ??(2).table: 為當前映射文件指定對應的數據庫表名
? ? ?
? ? (3).schema: 設置當前指定的持久類對應的數據庫表的schema名
? ? ?
? ??(4).catalog: 設置當前指定的持久類對應的數據庫表的catalog名
? ? ?
? ??(5).lazy: 設置是否使用延遲加載
? ?
? ???(6).batch-size: 設置批量操作記錄的數目(默認值為1)
? ? ?
? ??(7).check: 指定一個SQL語句用于Schema前的條件檢查
? ? ?
? ??(8).where: 指定一個附加的SQL語句的where條件
? ?
? ???(9).rowid: 指定是否支持ROWID
? ?
? ???(10).entity-name:實體名稱 默認值為類名
? ? ?
? ??(11).subselect: 將不可變的只讀實體映射到數據庫的子查詢中
? ? ?
? ??(12).dynamic-update: 指定用于update的SQL語句是否動態(tài)生成 默認值為false
? ?
? ???(13).dynamic-insert: 指定用于insert的SQL語句是否動態(tài)生成 默認值為false
? ? ?
? ??(14).insert-before-update: 設定在Hibernate執(zhí)行update之前是否通過select語句來確定對象是否確實被修改了,如果該對象的值沒有改變,update語句將不會被執(zhí)行(默認值為false)
? ? ?
? ??(15).abstract: 用于在聯合子類中標識抽象的超類(默認值為false)
? ? ?
? ??(16).emutable: 表明該類的實例是否是可變的 默認值為fals
? ? ?
? ??(17).proxy: 指定延遲加載代理類
? ? ?
? ??(18).polymorphism: 指定使用多態(tài)查詢的方式 默認值為implicit
? ? ?
? ??(19).persister: 指定一個Persister類
? ?
? ? ?(20).discriminator-value: 子類識別標識 默認值為類名
? ? ?
? ??(21).optimistic-lock: 指定樂觀鎖定的策略 默認值為vesion
class節(jié)點的字節(jié)點:
? ? ?(1).id: 定義當前映射文件對應的持久類的主鍵屬性和數據表中主鍵字段的相關信息
? ? ?(2).property: 定義當前映射文件對應的持久類的屬性和數據表中字段的相關信息
? ? ?(3).sql-insert: 使用定制的SQL語句執(zhí)行insert操作
? ? ?(4).sql-delete: 使用定制的SQL語句執(zhí)行delete操作
? ? ?(5).sql-update: 使用定制的SQL語句執(zhí)行update操作
? ? ?(6).subselect: 定義一個子查詢
? ? ?(7).comment: 定義表的注釋
? ? ?(8).composite-id: 持久類與數據庫表對應的聯合主鍵
? ? ?(9).many-to-one: 定義對象間的多對一的關聯關系
? ? ?(10).one-to-one: 定義對象間的一對一的關聯關系

? ? ?(11).any: 定義any映射類型
? ? ?(12).map: map類型的集合映射
? ? ?(13).set: set類型的集合映射
? ? ?(14).list: list類型的集合映射
? ? ?(15).array: array類型的集合映射

? ? ?(16).bag: bag類型的集合映射
? ? ?(17).primitive-array: primitive-array類型的集合映射
? ? ?(18).query: 定義裝載實體的HQL語句
? ? ?(19).sql-query: 定義裝載實體的SQL語句
? ? ?(20).synchronize: 定義持久化類所需要的同步資源
? ? ?(21).query-list: 映射由查詢返回的集合
? ? ?(22).natural-id: 聲明一個唯一的業(yè)務主鍵
? ? ?(23).join: 將一個類的屬性映射到多張表中
? ? ?(24).sub-class: 聲明多態(tài)映射中的子類
? ? ?(25).joined-subclass: 生命多態(tài)映射中的來連接子類
? ? ?(26).union-subclass: 聲明多態(tài)映射中的聯合子類
? ? ?(27).loader: 定義持久化對象的加載器
? ? ?(28).filter: 定義Hibernate使用的過濾器
? ? ?(29).component: 定義組件映射
? ? ?(30).dynamic-component: 定義動態(tài)組件映射
? ? ?(31).properties: 定義一個包含多個屬性的邏輯分組
? ? ?(32).cache: 定義緩存的策略
? ? ?(33).discriminator: 定義一個鑒別器
? ? ?(34).meta: 設置類或屬性的元數據屬性
? ? ?(35).timestamp: 指定表中包含時間戳的數據
? ? ?(36).vesion: 指定表所包含的附帶版本信息的數據


4,<id>定義主鍵:

? ? ?Hibernate使用OID(對象標識符)來標識對象的唯一性,OID是關系數據庫中主鍵在Java對象模型中的等價物,在運行時,Hibernate根據OID來維持Java對象和數據庫表中記錄的對應關系

id節(jié)點的屬性:
? ? ?(1).name: 指定當前映射對應的持久類的主鍵名
? ? ?(2).column: 指定當前映射對應的數據庫表中的主鍵名(默認值為對應持久類的主鍵/屬性名)
? ? ?(3).type: 指定當前映射對應的數據庫表中的主鍵的數據類型

? ? ?(4).unsaved-value: 判斷此對象是否進行了保存
? ? ?(5).daccess: Hibernate訪問主鍵屬性的策略(默認值為property)


?5.generator節(jié)點的屬性:
? ? ?(1).class: 指定主鍵生成器
? ? ?(2).name: 指定當前映射對應的持久類的主鍵名
? ? ?(3).column: 指定當前映射對應的數據庫表中的主鍵名(默認值為對應持久類中的主鍵名)

? ? ?(4).type: 指定當前映射對應的數據庫中主鍵的數據類型
? ? ?(5).unique: 設置該字段的值是否唯一(默認值為false)
? ? ?(6).not-null: 設置該字段的值是否可以為null(默認值為false)
? ? ?(7).update: 設置update操作時是否包含本字段的數據(默認值為true)
? ? ?(8).insert: 設置insert操作時是否包含本字段的數據(默認值為true)
? ? ?(9).formula: 設置查詢操作時該屬性的值用指定的SQL來計算
? ? ?(10).access: Hibernate訪問這個屬性的策略(默認值為property)
? ? ?(11).lazy: 設置該字段是否采用延遲加載策略(默認值為false)
? ? ?(12).optimistic-lock: 指定此屬性做更新操作時是否需要樂觀鎖定(默認值為true)

6.property節(jié)點的屬性:?
? ? ?用于持久化類的屬性與數據庫表字段之間的映射,包含如下屬性:

? ? ? (1)name:持久化類的屬性名,以小寫字母開頭
? ? ? (2)column:數據庫表的字段名
? ? ? (3)type:Hibernate映射類型的名字

? ? ?(4).formula: 設置當前節(jié)點對應的持久類中的屬性的值由指定的SQL從數據庫獲取
注:指定的SQL必須用()括起來,指定SQL中使用列時必須用表的別名加.加列名的方式訪問,但如果指定SQL中要使用當前映射對應的列時不能用表的別名加.加列名的方式訪問,而是直接訪問即可
? 如:formula="(select tn.columnName from tableName tn where tn.columnName=當前映射中的屬性名)"
? ? ?(5).unique: 設置該字段的值是否唯一(默認值為false)
? ? ?(6).not-null: 設置該字段的值是否可以為null(默認值為false)
? ? ?(7).not-found: 設置當當前節(jié)點對應的數據庫字段為外鍵時引用的數據不存在時如何讓處理(默認值為exception:產生異常,可選值為ignore:對不存在的應用關聯到null)
? ? ?(8).property-ref: 設置關聯類的屬性名,此屬性和本類的關聯相對應 默認值為關聯類的主鍵
? ? ?(9).entity-name: 被關聯類的實體名
? ? ?(10).lazy: 指定是否采用延遲加載及加載策略(默認值為proxy:通過代理進行關聯,可選值為true:此對象采用延遲加載并在變量第一次被訪問時抓取、false:此關聯對象不采用延遲加載)
? ? ?(11).access: Hibernate訪問這個屬性的策略(默認值為property)
? ? ?(12).optimistic-lock: 指定此屬性做更新操作時是否需要樂觀鎖定(默認值為true)

7.one-to-one節(jié)點的屬性:
? ? ?(1).name: 映射類屬性的名字
? ? ?(2).class: 關聯類的名字

? ? ?(3).formula: 絕大多數一對一關聯都指向其實體的主鍵。在某些情況下會指向一個或多個字段或是一個表達式,此時可用一個SQL公式來表示
? ? ?(4).cascade: 設置級聯操作時的級聯類型
? ? ?(5).constrained: 表明當前類對應的表與被關聯的表之間是否存在著外鍵約束 默認值為false
? ? ?(6).fetch: 設置抓取數據的策略 可選值為 join外連接抓取、select序列選擇抓取
? ? ?(7).property-ref: 設置關聯類的屬性名,此屬性和本類的主鍵相對應 默認值為關聯類的主鍵
? ? ?(8).access: Hibernate訪問這個屬性的策略(默認值為property)
? ? ?(9).lazy: 指定是否采用延遲加載及加載策略 默認值為proxy通過代理進行關聯 可選值為 true此對象采用延遲加載并在變量第一次被訪問時抓取、false此關聯對象不采用延遲加載
? ? ?(10).entity-name: 被關聯類的實體名


8.many-to-one 元素:
? ? ?(1).name: 映射類屬性的名字
? ? ?(2).class: 關聯類的名字

? ? ?(3).formula: 絕大多數一對一關聯都指向其實體的主鍵。在某些情況下會指向一個或多個字段或是一個表達式,此時可用一個SQL公式來表示
? ? ?(4).column: 中間關聯表映射到目標關聯表的關聯字段
? ? ?(5).cascade: 設置級聯操作時的級聯類型
? ? ?(6).fetch: 設置抓取數據的策略 默認值為select序列選擇抓取 可選值為join外連接抓取
? ? ?(7).lazy: 指定是否采用延遲加載及加載策略 默認值為proxy通過代理進行關聯 可選值為 true此對象采用延遲加載并在變量第一次被訪問時抓取、false此關聯對象不采用延遲加載
? ? ?(8).update: 進行update操作時是否包含此字段
? ? ?(9).insert: 進行insert操作時是否包含此字段
? ? ?(10).not-found: 指定外鍵引用的數據不存在時如何讓處理 默認值為exception產生異常 可選值為ignore對不存在的應用關聯到null

9.many-to-many 元素
10.set 元素
? ? ? (1).name: 映射類屬性的名字
? ? ? (2).table: 關聯的目標數據庫表
? ? ? (3).schema: 目標數據庫表的schema名字
? ? ? (4).catalog: 目標數據庫表的catalog名字
? ? ? (5).subselect: 定義一個子查詢
? ? ? (6).sort: 設置排序的類型 默認值為 unsorted不排序 可選值為 natural自然排序、comparatorClass實現接口類作為排序算法 避免與order-by同時使用
? ? ? (7).lazy: 是否采用延遲加載
? ? ? (8).inverse: 用于標識雙向關聯中被動的一方 默認值為false
? ? ? (9).cascade: 設置級聯操作時的級聯類型
? ? ? (10).mutable: 標識被關聯對象是否可以改變 默認值為true
? ? ? (11).order-by: 設置排序規(guī)則
? ? ? (12).where: 增加篩選條件
? ? ? (13).batch-size: 延遲加載時,一次讀取數據的數量 默認值為1
? ? ? (14).fetch: 設置抓取數據的策略 可選值為 join外連接抓取、select序列選擇抓取
? ?11.list 元素
? ?12.map 元素

總結

以上是生活随笔為你收集整理的hibernate中的映射文件xxx.hbm.xml详解总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 免费一级黄色大片 | 九九热视频在线免费观看 | 久久精品91| 国产麻豆乱码精品一区二区三区 | 欧美色国 | 精品在线视频免费观看 | 17c在线观看视频 | 国精产品一区一区三区 | 91精品婷婷国产综合久久竹菊 | 色久视频| 五月天一区二区三区 | ass日本| 天天爽一爽 | 久久亚洲精品无码va白人极品 | 男人私人影院 | 91伦理视频 | 国产一区在线视频观看 | 亚洲国产无线乱码在线观看 | 成人午夜视频免费 | 欧美处女 | 给我免费观看片在线电影的 | 88xx成人永久免费观看 | 成人在线短视频 | 久久两性视频 | 高清无码一区二区在线观看吞精 | 性色视频 | 91成人在线免费视频 | 无码人妻丰满熟妇区五十路 | 日本护士取精xxxxxhd | 美女黄免费 | 国产午夜伦鲁鲁 | 色婷婷六月天 | а√天堂资源在线 | 一级不卡| 欧美日韩亚洲精品一区二区 | 中文字幕一区二区三区人妻电影 | 久久综合激情网 | 神马午夜51 | 男女69视频 | 国产任你操 | 国产精品伦理一区 | 免费a v视频 | 美女色av | 成人精品视频在线 | 婷婷综合视频 | 91精品啪在线观看国产线免费 | 国产情侣av自拍 | a无一区二区三区 | 国产高清一区在线 | 91av一区二区三区 | 中国美女乱淫免费看视频 | 欧美激情精品久久久久久变态 | 超碰在线视屏 | 欧美电影一区 | 青娱乐欧美 | 韩国日本欧美一区 | 91麻豆一区二区 | 中文字幕在线观看网址 | 天天插天天干天天操 | 日韩精品一区二区三区视频在线观看 | 国产精品福利一区二区 | 免费观看国产精品 | 日本成人免费 | 午夜国产福利在线 | 欧美一区二区三区免 | 1024毛片基地| 激情视频在线免费观看 | 亚洲毛片在线 | 国产av成人一区二区三区高清 | 强乱中文字幕av一区乱码 | 日韩爱爱网站 | 毛片随便看| 国产妇女视频 | 用力挺进新婚白嫩少妇 | 波多野结衣一区二 | 亚洲精品日韩精品 | 黄视频免费看在线 | www.四虎com| 婷婷丁香一区二区三区 | 99自拍 | 日韩毛片在线视频 | 91麻豆成人精品国产免费网站 | 久精品在线观看 | 少妇69xx| 麻豆www. | 日韩欧美一区二区三区久久婷婷 | 二区三区不卡 | 黄色成年人视频 | 国产精品8888| 40到50岁中老年妇女毛片 | 日本欧美国产一区二区三区 | 欧亚毛片 | 四虎在线免费播放 | 亚洲欧美日韩精品在线 | 国产精品9191 | 我把护士日出水了视频90分钟 | 久久国内免费视频 | 国产亚洲制服 | 人人精品久久 |