13弟孟、集合映射(hibernate筆記)

一、簡介

前面講的一對多或多對一等等样悟,其中集合中必須放的是實體類拂募,如果放的是字符串則不叫一對多或多對一映射。這里我們在集合中存儲的都不是實體類窟她,存儲的是字符串集合陈症,這就叫集合映射。這類映射在實際中用的比較少震糖,但是需要了解其映射方式录肯。主要注意各類集合的配置方式。

實例(工程hibernate_collection_mapping

相關映射:
CollectionMapping.java

private int id;
private String name;
private Set setValue;
private List listValue;
private String[] arrayValue;
private Map mapValue;

CollectionMapping.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="cn.itcast.hibernate.CollectionMapping" table="_CollectionMapping">
        <id name="id">
            <generator class="native"/>
        </id>
        <property name="name"/>
        <set name="setValue" table="_set_value">
            <key column="set_id"/>
            <element type="string" column="set_value"/>
        </set>
        <list name="listValue" table="_list_value">
            <key column="list_id"/>
            <list-index column="list_index"/>
            <element type="string" column="list_value"/>
        </list>
        <array name="arrayValue" table="_array_value">
            <key column="array_id"/>
            <list-index column="array_index"/>
            <element type="string" column="array_value"/>
        </array>
        <map name="mapValue" table="_map_value">
            <key column="map_id"/>
            <map-key type="string" column="map_key"/>
            <element type="string" column="map_value"/>
        </map>
    </class>
</hibernate-mapping>

說明:這里在數據庫中會生成五張表吊说,其中各個集合分別生成一張表论咏,而CollectionMapping類生成一張表。其主鍵分別作為各個集合表的外鍵颁井。

測試:
CollectionMappintTest.java

package cn.itcast.hibernate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.hibernate.Session;
import junit.framework.TestCase;
public class CollectionMappintTest extends TestCase {

    public void testSave1() {
        Session session = null;
        CollectionMapping c = new CollectionMapping();
        
        c.setName("xxx");
        
        Set setValue = new HashSet();
        setValue.add("a");
        setValue.add("b");
        c.setSetValue(setValue);
        
        List listValue = new ArrayList();
        listValue.add("c");
        listValue.add("d");
        c.setListValue(listValue);
        
        String[] arrayValue = new String[]{"e", "f"};
        c.setArrayValue(arrayValue);
        
        Map mapValue = new HashMap();
        mapValue.put("k1", "v1");
        mapValue.put("k2", "v2");
        c.setMapValue(mapValue);        
        try {
            session = HibernateUtils.getSession();
            session.beginTransaction();
            session.save(c);
            session.getTransaction().commit();
        }catch(Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }finally {
            HibernateUtils.closeSession(session);
        }
    }   
    
    public void testLoad1() {
        Session session = null;
        try {
            session = HibernateUtils.getSession();
            session.beginTransaction();
            CollectionMapping c = (CollectionMapping)session.load(CollectionMapping.class, 1);
            System.out.println("name=" + c.getName());
            System.out.println("setvalue=" + c.getSetValue());
            System.out.println("mapvalue=" + c.getMapValue());
            System.out.println("listvalue=" + c.getListValue());
            session.getTransaction().commit();
        }catch(Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }finally {
            HibernateUtils.closeSession(session);
        }
    }           
}

說明:可以看到在存儲時和一對多或多對一的區(qū)別主要是不需要顯式的存儲集合厅贪,當在存儲CollectionMapping類時會自動發(fā)送相關的sql語句將集合中的信息存入到相關的表中。查詢的時候我們可以一次性將所以集合信息都查詢出來雅宾。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末养涮,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子眉抬,更是在濱河造成了極大的恐慌贯吓,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吐辙,死亡現場離奇詭異宣决,居然都是意外死亡,警方通過查閱死者的電腦和手機昏苏,發(fā)現死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來威沫,“玉大人贤惯,你說我怎么就攤上這事“袈樱” “怎么了孵构?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長烟很。 經常有香客問我颈墅,道長蜡镶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任恤筛,我火速辦了婚禮官还,結果婚禮上,老公的妹妹穿的比我還像新娘毒坛。我一直安慰自己望伦,他們只是感情好,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布煎殷。 她就那樣靜靜地躺著屯伞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪豪直。 梳的紋絲不亂的頭發(fā)上劣摇,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機與錄音弓乙,去河邊找鬼饵撑。 笑死,一個胖子當著我的面吹牛唆貌,可吹牛的內容都是我干的滑潘。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼锨咙,長吁一口氣:“原來是場噩夢啊……” “哼语卤!你這毒婦竟也來了?” 一聲冷哼從身側響起酪刀,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤粹舵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后骂倘,有當地人在樹林里發(fā)現了一具尸體眼滤,經...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年历涝,在試婚紗的時候發(fā)現自己被綠了诅需。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡荧库,死狀恐怖堰塌,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情分衫,我是刑警寧澤场刑,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站蚪战,受9級特大地震影響牵现,放射性物質發(fā)生泄漏铐懊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一瞎疼、第九天 我趴在偏房一處隱蔽的房頂上張望科乎。 院中可真熱鬧,春花似錦丑慎、人聲如沸喜喂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽玉吁。三九已至,卻和暖如春腻异,著一層夾襖步出監(jiān)牢的瞬間进副,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工悔常, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留影斑,地道東北人。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓机打,卻偏偏與公主長得像矫户,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子残邀,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理皆辽,服務發(fā)現,斷路器芥挣,智...
    卡卡羅2017閱讀 134,657評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,139評論 25 707
  • 1. Java基礎部分 基礎部分的順序:基本語法驱闷,類相關的語法,內部類的語法空免,繼承相關的語法空另,異常的語法,線程的語...
    子非魚_t_閱讀 31,632評論 18 399
  • 其實就是問你數組里不同的元素能否超過二分之一蹋砚。 不上描述了扼菠,上example吧
    namelessEcho閱讀 122評論 0 0
  • ? 這兩天放假畅厢,回了趟老家; 現在的農村真的是成了空村氮昧,以前還有不少上了年紀的人在家里看看家框杜,擺弄擺弄一點菜園地浦楣,...
    遇見阿鋒閱讀 511評論 7 5