<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 66,  comments - 11,  trackbacks - 0
    class屬性有一下幾種類型:
    1、Assiged:主鍵由應用邏輯產生,數據交由Hibernate保存時,主鍵值已經設置完畢,無需Hibernate干預。
    2、hilo:通過hi/lo算法實現的主鍵生成機制,需要額外的數據庫表保存主鍵生成歷史狀態。
    3、與hilo類似,通過hi/lo算法實現的主鍵生成機制,只是主鍵歷史狀態保存在Sequence中,適用于支持Sequence的數據庫。
    4、incremaent:主鍵按數值順序遞增。此方式的實現機制為在當前應用中維持一個變量,以保存著當前的最大值,之后每次需要生成主鍵的時候將此值加1作為主鍵。如果同一數據庫有多個實例訪問,此方式必須避免使用。
    5、identity:采用數據庫提供的主鍵生成機制.
    6、sequence:采用數據庫提供的sequence機制生成主鍵
    7、native:由Hibernate根據數據庫適配器中的定義,自動采用identity、hilo、sequence的其中一種作為主鍵生成方式。
    8、uuid.hex:這種主鍵生成機制在最大程度上保證了產生ID的唯一性。
    9、uuid.string:與uuid.hex類似。
    10、foreign:使用外部表的字段作為主鍵。

        由于常用的數據庫,如SQLServer、MySql等,都提供了易用的主鍵生成機制。我們可以在數據庫提供的主鍵生成機制上,采用generator-class=native的主鍵生成方式。
        不過,值得注意的是,一些數據庫提供的主鍵生成機制在效率上未必最佳,大量并發insert數據時可能會引起表之間的互鎖。
        數據庫提供的主鍵生成機制,往往是通過在一個內部表中保存當前主鍵狀態,之后每次插入數據會讀取這個最大值,然后加上遞增量作為新記錄的主鍵值,之后再把這個新的最大值更新回內部表中,這樣,一次Insert操作可能導致數據庫內部多次表讀寫操作,同時伴隨的還有數據的加鎖解鎖操作,這對性能產生了很大影響。
        另外,對于借用Sequence作為主鍵產生機制的數據庫而言,如Oracle,如果采用<generator class="sequence">設定,那么插入一條新的數據之前,Hibernate必須首先向數據庫發起一條select sequence操作以獲取主鍵值。
        這樣,一次保存操作實際上包含了2個過程,首先查詢sequence獲得主鍵,其次執行Insert插入記錄,無疑操作效率相對較低。
        大多數情況下,如果邏輯允許,可以考慮使用uuid.hex主鍵生成方式。

        Hibernate3同時還提供了另一種與實體類型無關的映射方式:動態模型(Dynamic Model),所謂動態模型,即通過通用數據容器(Map)對庫表記錄進行表達。
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
        
    <class entity-name="DynamicUserMap" table="T_User">
            
    <id name="id" column="id" type="java.lang.Integer">
                
    <generator class="native"/>
            
    </id>
            
    <property name="name" type="java.lang.String" column="name"/>
            
    <property name="age" type="java.lang.Integer" column="age"/>
        
    </class>
    </hibernate-mapping>

    操作示例:
    session = sessionFactory.openSession().getSession(EntityMode.MAP);
    Map userMap 
    = new HashMap();
    userMap.put(
    "name","ken");
    userMap.put(
    "age",new Integer(25));

    Transaction tx 
    = session.beginTransaction();
    session.save(
    "DynamicUserMap",userMap);
    tx.commit();

    首先,我們以EntityMode.MAP模式獲取Session實例,以此表明Session操作的對象并非普通的實體類,而是Map類型數據。
    其次,在執行實體操作時,須指明要操作的實體名:
    session.save("DynamicUserMap",userMap);

    posted on 2009-10-16 14:22 王永慶 閱讀(225) 評論(0)  編輯  收藏 所屬分類: HIBERNATE
    <2009年10月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    關注blogs

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 深夜特黄a级毛片免费播放| 99国产精品视频免费观看| 成人免费一区二区三区| 88av免费观看入口在线| 亚洲国产综合精品中文字幕| 亚洲精品视频专区| 一级做a爰全过程免费视频毛片| 亚洲免费视频网址| 亚洲免费人成在线视频观看| 国产精品亚洲精品久久精品 | 亚洲综合精品一二三区在线| 亚洲精品理论电影在线观看| 无码国产精品一区二区免费16 | 亚洲大片免费观看| 两个人看的www视频免费完整版| 亚洲综合另类小说色区| 337p日本欧洲亚洲大胆人人| 国产成人啪精品视频免费网| 亚洲AV无码无限在线观看不卡| 久久久久久国产精品免费免费男同 | 成年人免费视频观看| 久久久久亚洲AV无码专区体验| 日本黄网站动漫视频免费| 亚洲色欲啪啪久久WWW综合网| 24小时日本韩国高清免费| 亚洲码国产精品高潮在线| 全免费a级毛片免费看| 久久久久亚洲精品无码网址| 日韩亚洲翔田千里在线| 亚洲精品动漫人成3d在线| 日韩成人免费视频| 亚洲人成综合网站7777香蕉| 亚洲成av人片一区二区三区| 国产成人高清亚洲一区91| 麻豆精品国产免费观看| 国产亚洲国产bv网站在线| 国产成人yy免费视频| 亚洲国产模特在线播放| 国产免费不卡视频| 污网站免费在线观看| 91在线亚洲精品专区|