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

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

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

    waterye

    Hibernate的查詢方式

    小結Hibernate的查詢方式

    1. get() and load()
    session.get(Clazz, id);
    session.load(Clazz, id);

    說明: load()與get()的區別
    請注意如果沒有匹配的數據庫記錄,load()方法可能拋出無法恢復的異常(unrecoverable exception)。 如果類的映射使用了代理(proxy),load()方法會返回一個未初始化的代理,直到你調用該代理的某方法時才會去訪問數據庫。 若你希望在某對象中創建一個指向另一個對象的關聯,又不想在從數據庫中裝載該對象時同時裝載相關聯的那個對象,那么這種操作方式就用得上的了。 如果為相應類映射關系設置了batch-size, 那么使用這種操作方式允許多個對象被一批裝載(因為返回的是代理,無需從數據庫中抓取所有對象的數據)。

    如果你不確定是否有匹配的行存在,應該使用get()方法,它會立刻訪問數據庫,如果沒有對應的行,會返回null

    2. HQL

    // 返回一行記錄
    String hql = "from TOrder o where o.id = ?";
    TOrder o 
    = (TOrder) s.createQuery(hql)
            .setParameter(
    0, orderId)
            .uniqueResult();

    // 命名參數
    Query q = sess.createQuery("from DomesticCat cat where cat.name = :name");
    q.setString(
    "name""Fritz");

    // 位置參數
    Query q = sess.createQuery("from DomesticCat cat where cat.name = ?");
    q.setString(
    0"Izi");

    // 命名參數列表
    Query q = sess.createQuery("from DomesticCat cat where cat.name in (:namesList)");
    q.setParameterList(
    "namesList", names);

    // 分頁查詢 
    Query q = sess.createQuery("from DomesticCat cat");
    q.setFirstResult(
    20);
    q.setMaxResults(
    10);
    List cats 
    = q.list();


    3. Criteria

    List list = s.createCriteria(Enrolment.class)
                .createAlias(
    "student""s")
                .createAlias(
    "course""c")
                .add( Restrictions.isNotEmpty(
    "s.enrolments") )
                .setProjection( Projections.projectionList()
                        .add( Projections.property(
    "s.name") )
                        .add( Projections.property(
    "c.description") )
                )
                .setCacheable(
    true)
                .list();


    4. Native SQL

    String treeSql = "" +
                    
    "select {t.*}, level from tree t " +
                    
    " start with t.parent_id = 0 " +
                    
    " connect by prior t.id = t.parent_id";

    List result 
    = session.createSQLQuery(treeSql)
        .addEntity(
    "t", Tree.class)
        .addScalar(
    "level", Hibernate.INTEGER)
        .list();

    5. Named SQL queries(不推薦)

    6. filter(不推薦)

    7. Detached queries(還沒測試)
    The DetachedCriteria class lets you create a query outside the scope of a session, and then later execute it using some arbitrary Session

    參考
    1. Hibernate Reference Documentation
    2. Hibernate test case

    posted on 2005-08-29 16:34 waterye 閱讀(4125) 評論(3)  編輯  收藏 所屬分類: hibernate

    Feedback

    # re: Hibernate的查詢方式 2005-08-30 19:13 David

    有否left join /right join 之類的?  回復  更多評論   

    # re: Hibernate的查詢方式 2005-08-30 21:16 Water Ye@ITO

    demo:
    select cust
    from Product prod,
    Store store
    inner join store.customers cust
    where prod.name = 'widget'
    and store.location.name in ( 'Melbourne', 'Sydney' )
    and prod = all elements(cust.currentOrder.lineItems)  回復  更多評論   

    # re: Hibernate的查詢方式 2005-08-30 21:19 Water Ye@ITO

    left join: from Cat as cat left join cat.mate.kittens as kittens
    full join: from Formula form full join form.parameter param  回復  更多評論   

    主站蜘蛛池模板: 国产精品美女久久久免费| 亚洲国产成人精品无码区二本| 无套内射无矿码免费看黄| 日美韩电影免费看| 欧美亚洲国产SUV| www国产亚洲精品久久久| 新最免费影视大全在线播放| 亚洲国产精品第一区二区三区| 一级毛片人与动免费观看| 久久青青草原亚洲av无码| 国产精品99爱免费视频| 亚洲精品无码不卡在线播HE| 99久久国产精品免费一区二区| 亚洲Av无码精品色午夜| 免费能直接在线观看黄的视频 | 国产精品亚洲精品日韩已方| 九九免费精品视频在这里| 亚洲香蕉网久久综合影视| 四虎国产成人永久精品免费 | 亚洲成av人在线观看网站| 免费人成网站7777视频| 国产三级在线免费观看| 久久精品国产亚洲AV无码麻豆| 99久久精品日本一区二区免费 | 国产成人无码免费视频97| 特级做a爰片毛片免费看| 欧洲亚洲国产清在高| 永久免费AV无码国产网站| 亚洲av午夜国产精品无码中文字| 亚洲精品和日本精品| 久久精品免费观看国产| 自拍偷区亚洲国内自拍| 久久久久亚洲AV无码专区网站 | 国产精一品亚洲二区在线播放| 日本在线看片免费人成视频1000 | 日韩免费观看的一级毛片| 国产JIZZ中国JIZZ免费看| 亚洲第一页在线视频| 亚洲国产精品13p| 国产精品免费网站| 一级毛片免费在线观看网站|