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

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

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

    隨筆-208  評(píng)論-469  文章-30  trackbacks-0

    Hibernate3.0 采用新的基于ANTLR的HQL/SQL查詢翻譯器,在Hibernate的配置文件中,hibernate.query.factory_class屬性用來(lái)選擇查詢翻譯器。
    (1)選擇Hibernate3.0的查詢翻譯器:
    hibernate.query.factory_class= org.hibernate.hql.ast.ASTQueryTranslatorFactory
    (2)選擇Hibernate2.1的查詢翻譯器
    hibernate.query.factory_class= org.hibernate.hql.classic.ClassicQueryTranslatorFactory
    為了使用3.0的批量更新和刪除功能,只能選擇(1)否則不能解釋批量更新的語(yǔ)句。選擇(2)但沒(méi)法解釋批量更新語(yǔ)句了。

    大批量更新/刪除(Bulk update/delete)

    就像已經(jīng)討論的那樣,自動(dòng)和透明的 對(duì)象/關(guān)系 映射(object/relational mapping)關(guān)注于管理對(duì)象的狀態(tài)。 這就意味著對(duì)象的狀態(tài)存在于內(nèi)存,因此直接更新或者刪除 (使用 SQL 語(yǔ)句 UPDATEDELETE) 數(shù)據(jù)庫(kù)中的數(shù)據(jù)將不會(huì)影響內(nèi)存中的對(duì)象狀態(tài)和對(duì)象數(shù)據(jù)。 不過(guò),Hibernate提供通過(guò)Hibernate查詢語(yǔ)言來(lái)執(zhí)行大批 量SQL風(fēng)格的(UPDATE)和(DELETE) 語(yǔ)句的方法。

    UPDATEDELETE語(yǔ)句的語(yǔ)法為: ( UPDATE | DELETE ) FROM? ClassName (WHERE WHERE_CONDITIONS)?。 有幾點(diǎn)說(shuō)明:

    • 在FROM子句(from-clause)中,F(xiàn)ROM關(guān)鍵字是可選的

    • 在FROM子句(from-clause)中只能有一個(gè)類(lèi)名,并且它不能有別名

    • 不能在大批量HQL語(yǔ)句中使用連接(顯式或者隱式的都不行)。不過(guò)在WHERE子句中可以使用子查詢。

    • 整個(gè)WHERE子句是可選的。

    舉個(gè)例子,使用Query.executeUpdate()方法執(zhí)行一個(gè)HQL UPDATE語(yǔ)句:

    Session session = sessionFactory.openSession();
            Transaction tx = session.beginTransaction();
    
            String hqlUpdate = "update Customer set name = :newName where name = :oldName";
            int updatedEntities = session.createQuery( hqlUpdate )
                                .setString( "newName", newName )
                                .setString( "oldName", oldName )
                                .executeUpdate();
            tx.commit();
            session.close();

    執(zhí)行一個(gè)HQL DELETE,同樣使用 Query.executeUpdate() 方法 (此方法是為 那些熟悉JDBC PreparedStatement.executeUpdate() 的人們而設(shè)定的)

    Session session = sessionFactory.openSession();
            Transaction tx = session.beginTransaction();
    
            String hqlDelete = "delete Customer where name = :oldName";
            int deletedEntities = session.createQuery( hqlDelete )
                                .setString( "oldName", oldName )
                                .executeUpdate();
            tx.commit();
            session.close();

    Query.executeUpdate()方法返回的整型值表明了受此操作影響的記錄數(shù)量。 注意這個(gè)數(shù)值可能與數(shù)據(jù)庫(kù)中被(最后一條SQL語(yǔ)句)影響了的“行”數(shù)有關(guān),也可能沒(méi)有。一個(gè)大批量HQL操作可能導(dǎo)致多條實(shí)際的SQL語(yǔ)句被執(zhí)行, 舉個(gè)例子,對(duì)joined-subclass映射方式的類(lèi)進(jìn)行的此類(lèi)操作。這個(gè)返回值代表了實(shí)際被語(yǔ)句影響了的記錄數(shù)量。在那個(gè)joined-subclass的例子中, 對(duì)一個(gè)子類(lèi)的刪除實(shí)際上可能不僅僅會(huì)刪除子類(lèi)映射到的表而且會(huì)影響“根”表,還有可能影響與之有繼承關(guān)系的joined-subclass映射方式的子類(lèi)的表。

    posted on 2007-03-19 00:23 EricWong 閱讀(1073) 評(píng)論(0)  編輯  收藏

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲国产专区一区| 国产精品怡红院永久免费| 国产精品色午夜视频免费看| 亚洲视频日韩视频| 久久青草精品38国产免费| 亚洲人JIZZ日本人| 久久免费线看线看| 亚洲综合一区二区国产精品| 精品熟女少妇a∨免费久久| 亚洲国产精品久久久久秋霞影院| 成人黄网站片免费视频| 亚洲色欲久久久综合网东京热| 精品国产污污免费网站入口在线| 亚洲色无码一区二区三区| 免费无码作爱视频| 亚洲电影免费在线观看| 成人午夜免费福利视频| 亚洲熟妇无码一区二区三区| 日韩免费一级毛片| 一级毛片免费一级直接观看| 国产亚洲成av人片在线观看| 精品日韩99亚洲的在线发布| 国产免费伦精品一区二区三区| 亚洲国产精品一区二区九九 | 亚洲午夜激情视频| 男女猛烈xx00免费视频试看| 亚洲AV蜜桃永久无码精品| 亚洲一区二区三区免费在线观看| 99久久99久久精品免费看蜜桃| 亚洲偷自拍另类图片二区| 免费国产综合视频在线看| 国产免费一级高清淫曰本片| 亚洲一区精品中文字幕| 在线免费不卡视频| 中文在线观看免费网站| 亚洲理论片在线观看| 久久青草91免费观看| 久久精品国产亚洲AV久| 相泽亚洲一区中文字幕| 国产成人免费高清激情明星| 精品在线免费视频|