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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Hibernate映射配置方法

發(fā)布時(shí)間:2025/4/14 编程问答 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hibernate映射配置方法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

*************************Hibernate基本映射

??? hibernate通過(guò)映射文件知道如何加載(load)和存儲(chǔ)(store)持久化類的對(duì)象,映射文件告訴hibernate應(yīng)該訪問(wèn)數(shù)據(jù)庫(kù)(database)里面的哪張表(table)及應(yīng)該使用表里面的哪些字段(column).

實(shí)體類-----表 ,采用<class>標(biāo)簽映射;

實(shí)體類中的普通屬性(不包括集合、自定義類和數(shù)組)---表字段,采用<property>標(biāo)簽映射

注意:如果實(shí)體類的名稱或?qū)嶓w類中屬性名稱與數(shù)據(jù)庫(kù)關(guān)鍵字重復(fù),將會(huì)出現(xiàn)問(wèn)題

可以考慮采用table屬性和column屬性對(duì)其進(jìn)行得新命名

實(shí)體類的設(shè)計(jì)原則:

*實(shí)現(xiàn)無(wú)參的默認(rèn)的構(gòu)造函數(shù)

*提供一個(gè)標(biāo)識(shí)

*建議不要用fianl修飾實(shí)體類

*建議為實(shí)體類生成getter和setter方法

映射文件重要標(biāo)簽:

1.<DOCTYPE>

2.<hibernate-mapping>

3.<class>

4.<id>

5.<Generator>

???? 可選的<generator>子元素是一個(gè)Java類的名,用來(lái)為該持久類的實(shí)例生成唯一的標(biāo)識(shí).如果這個(gè)生成器實(shí)例需要某些配置值或者初始化參數(shù),用<param>元素.

所有的生成器都實(shí)現(xiàn)org.hibernate.id.IdentifierGenerator接口,某些應(yīng)用程序可以選擇提供他們自己特定的實(shí)現(xiàn).當(dāng)然,Hibernate提供了很多內(nèi)置的實(shí)現(xiàn).下面是一些內(nèi)置生成器的快捷名字:

主要了解以下生成策略:

??? *identity

??? *sequence

??? *uuid

??? *native

??? *assigned

??? *foreign

6.<composite_id>

7.<discriminator>

8.<property>

?

************************************關(guān)聯(lián)映射

01.多對(duì)一單向映射(User<--Group)
02.多對(duì)多雙向映射(User<-- Role)
03.多對(duì)多單向映射(User<--Role)

04.一對(duì)一主鍵雙向(Person--> IdCard)
05.一對(duì)一主鍵單向(Person--> IdCard)

06.一對(duì)一外鍵單向(Person--> IdCard)
07.一對(duì)一外鍵雙向(Person<--> IdCard)
08.一對(duì)多單向(Group--> User)
09.一對(duì)多雙向(Group<—> User)

10.繼承映射(Pig和Bird 繼承Animal)
??? --一棵繼承樹映射成一張表

11.繼承映射(Pig和Bird 繼承Animal)

??? --一每個(gè)具體類映射成一張表joined-classs

12.繼承映射(Pig和Bird 繼承Animal)

??? --一每個(gè)子類類映射成一張表union-subclass

13. component映射

14. Set,Map,Arrary[],List映射

?

************************************

1.多對(duì)一單向映射(User- ->Group)
【Group.hbm.xml文件如下:】
<hibernate-mapping>
????????? <class name="com.dragon.hibernate.Group" table="t_group">
?????????????????? <id name="id">
??????????????????????? <generator class="native"/>
????????????????? </id>
????????????????? <property name="name"/>
?????????? </class>
</hibernate-mapping>
【User.hbm.xml文件如下:】
<hibernate-mapping>
???????? <class name="com.dragon.hibernate.User" table="t_user">
???????????????? <id name="id">
???????????????????? <generator class="native"/>
???????????????? </id>
???????????????? <property name="name"/>
???????????????? <many-to-one name="group" column="groupid"/>
????????? </class>
</hibernate-mapping>
---------------------------------------------------------
2.多對(duì)多雙向映射(User<- -Role)
【User.hbm.xml文件如下】
<hibernate-mapping>
<class name="com.dragon.hibernate.User" table="t_user">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<set name="roles" table="t_user_role">
<key column="userid"/>
<many-to-many class="com.dragon.hibernate.Role" column="roleid"/>
</set>
</class>
</hibernate-mapping>
【Role.hbm.xml文件如下】
<hibernate-mapping>
<class name="com.dragon.hibernate.Role" table="t_role">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<set name="users" table="t_user_role">
<key column="roleid"/>
<many-to-many class="com.dragon.hibernate.User" column="userid"/>
</set>
</class>
</hibernate-mapping>
---------------------------------------------------------
3.多對(duì)多單向映射(User<--Role)
在User端使用set 引用role 維持關(guān)系,則User.hbm.xml文件同上面的雙向一樣,只有Role.hbm.xml文件稍微有所小小的不同,比雙向更簡(jiǎn)單。
【Role.hbm.xml文件如下】
<hibernate-mapping>
<class name="com.dragon.hibernate.Role" table="t_role">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
【User.hbm.xml文件如下】
<hibernate-mapping>
<class name="com.dragon.hibernate.User" table="t_user">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<set name="roles" table="t_user_role">
<key column="userid"/>
<many-to-many class="com.dragon.hibernate.Role" column="roleid"/>
</set>
</class>
</hibernate-mapping>
---------------------------------------------------------
4.一對(duì)一主鍵雙向(Person--> IdCard)
【Person.hbm.xml文件如下】
<hibernate-mapping>
<class name="com.dragon.hibernate.Person" table="t_person">
<id name="id">
<generator class="foreign">
<param name="property"> idcard</param>
</generator>
</id>
<property name="name"/>
<one-to-one name="idcard" constrained="true"/>
</class>
</hibernate-mapping>
【Idcard.hbm.xml文件如下】
<hibernate-mapping>
<class name="com.dragon.hibernate.IdCard" table="t_idcard">
<id name="id">
<generator class="native"/>
</id>
<property name="idno"/>
<one-to-one name="person"></one-to-one>
</class>
</hibernate-mapping>
One-to-one標(biāo)簽指示hibernate如何加載關(guān)聯(lián)對(duì)象,默認(rèn)是根據(jù)主鍵加載;
constrained="true"表示當(dāng)前主鍵存在一個(gè)約束,person的主鍵作為外鍵參照idcard。
---------------------------------------------------------
5.一對(duì)一主鍵單向(Person--> IdCard)
Person.hbm.xml文件如下相同
Idcard.hbm.xml文件如下:
<hibernate-mapping>
<class name="com.dragon.hibernate.IdCard" table="t_idcard">
<id name="id">
<generator class="native"/>
</id>
<property name="idno"/>
</class>
</hibernate-mapping>
與雙向的只是少了這句<one-to-one name="person"> </one-to-one> ---------------------------------------------------------

6.一對(duì)一外鍵單向(Person--> IdCard)
IdCard.hbm.xml文件如下:
<hibernate-mapping>
<class name="com.dragon.hibernate.IdCard" table="t_idcard">
<id name="id">
<generator class="native"/>
</id>
<property name="idno"/>
</class>
</hibernate-mapping>
Person.hbm.xml文件如下:
<hibernate-mapping>
<class name="com.dragon.hibernate.Person" table="t_person">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<many-to-one name="idcard" column="idcardid" unique="true"/>
</class>
</hibernate-mapping>
---------------------------------------------------------
7.一對(duì)一外鍵雙向(Person<--> IdCard)
Person.hbm.xml文件與單向一樣
IdCard.hbm.xml文件如下:
<hibernate-mapping>
<class name="com.dragon.hibernate.IdCard" table="t_idcard">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<one-to-one name="person" proper-ref=“idcard”/>
</class>
</hibernate-mapping>
---------------------------------------------------------
8.一對(duì)多單向(Group--> User)
注意,在key中的外鍵 <key column="groupid"/>要一致不然要生成中間表
【Group.hbm.xml文件如下】
<hibernate-mapping package="com.dragon.hibernate">
<class name="Group" table="t_group">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<set name="users">
<key column="groupid"/>
<one-to-many class="User"/>
</set>
</class>
</hibernate-mapping>
【User.hbm.xml文件如下】
<hibernate-mapping>
<class name="com.dragon.hibernate.User" table="t_user">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
---------------------------------------------------------
9.一對(duì)多雙向(Group<--> User)
【Group.hbm.xml文件如下】
<hibernate-mapping package="com.dragon.hibernate">
<class name="Group" table="t_group">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<set name="users" cascade="all">
<key column="groupid"/>
<one-to-many class="User"/>
</set>
</class>
</hibernate-mapping>
【User.hbm.xml文件如下:】
<hibernate-mapping>
<class name="com.dragon.hibernate.User" table="t_user">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<many-to-one name="groups" column="groupid"/>
</class>
</hibernate-mapping>
---------------------------------------------------------
10.繼承映射(Pig和Bird 繼承Animal)
--一棵繼承樹映射成一張表--一
extends.hbm.xml文件如下:
<hibernate-mapping package="com.dragon.hibernate">
<class name="Animal" table="t_extends">
<id name="id">
<generator class="native"/>
</id>
<discriminator column="type" type="string"/>
<property name="name"/>
<property name="sex"/>
<subclass name="Pig" discriminator-value="P">
<property name="weight"/>
</subclass>
<subclass name="Bird" discriminator-value="B">
<property name="height"/>
</subclass>
</class>
</hibernate-mapping>
---------------------------------------------------------
11.繼承映射(Pig和Bird 繼承Animal)

--一每個(gè)具體類映射成一張表joined-classs--一
extends.hbm.xml文件如下:
<hibernate-mapping package="com.dragon.hibernate">
<class name="Animal" table="t_animal">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<property name="sex"/>
<joined-subclass name="Pig" table="t_pig">
<key column="pid"/>
<property name="weight"> </property>
</joined-subclass>
<joined-subclass name="Bird" table="t_bird">
<key column="bid"/>
<property name="height"> </property>
</joined-subclass>
</class>
</hibernate-mapping>
---------------------------------------------------------
12.繼承映射(Pig和Bird 繼承Animal)

--每個(gè)子類類映射成一張表union-subclass--一
extends.hbm.xml文件如下:
<hibernate-mapping package="com.dragon.hibernate">
<class name="Animal" table="t_animal">
<id name="id">
<generator class="uuid"/>
</id>
<property name="name"/>
<property name="sex"/>
<union-subclass name="Pig" table="t_pig">
<property name="weight"/>
</union-subclass>
<union-subclass name="Bird" table="t_bird">
<property name="height"/>
</union-subclass>
</class>
</hibernate-mapping>
**注釋在使用<id name="id">
<generator class="uuid"/>
</id> 是不能將<generator class="uuid"/> 改寫成<generator class="native"/> ,不然會(huì)出錯(cuò)。相應(yīng)的Animal類中的id字段類型也要該為String.
如果在<class name="Animal" table="t_animal"> 中添加Abstract="true"可以使hibernate不生成表t_animal
---------------------------------------------------------
13. component映射
component.hbm.xml文件如下:
<hibernate-mapping>
<class name="com.bjsxt.hibernate.User" table="t_user">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<component name="contact">
<property name="email"/>
<property name="address"/>
<property name="zipCode"/>
<property name="contactTel"/>
</component>
</class>
</hibernate-mapping>
User類中有以下屬性:
private int id;
private String name;
private Contact contact;它不再是一種引用了
---------------------------------------------------------

14. Set,Map,Arrary[],List映射

CollectionMapping.hbm.xml文件如下:
<hibernate-mapping>
<class name="com.bjsxt.hibernate.CollectionMapping" table="t_CollectionMapping">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<set name="setValue" table="t_set_value">
<key column="set_id"/>
<element type="string" column="set_value"/>
</set>
<list name="listValue" table="t_list_value">
<key column="list_id"/>
<list-index column="list_index"/>
<element type="string" column="list_value"/>
</list>
<array name="arrayValue" table="t_array_value">
<key column="array_id"/>
<list-index column="array_index"/>
<element type="string" column="array_value"/>
</array>
<map name="mapValue" table="t_map_value">
<key column="map_id"/>
<map-key type="string" column="map_key"/>
<element type="string" column="map_value"/>
</map>
</class>
</hibernate-mapping>

轉(zhuǎn)載于:https://www.cnblogs.com/pyrmkj/p/3332460.html

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的Hibernate映射配置方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。