<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  回復  更多評論   

    主站蜘蛛池模板: 久久亚洲国产午夜精品理论片| 亚洲精品综合久久| 亚洲国产精品一区| 国产麻豆成人传媒免费观看| 亚洲国产一二三精品无码| 99视频在线免费观看| 精品久久香蕉国产线看观看亚洲| 国产又黄又爽又大的免费视频| 亚洲色婷婷一区二区三区| 免费播放在线日本感人片| 亚洲AV无码久久| 久久精品免费一区二区| 亚洲久悠悠色悠在线播放| 成年女人喷潮毛片免费播放| 亚洲国产成人久久精品软件| 亚洲国模精品一区| 精品在线免费观看| 亚洲H在线播放在线观看H| 破了亲妺妺的处免费视频国产| 一边摸一边桶一边脱免费视频| 亚洲一区二区三区在线观看精品中文 | 中文字幕在线免费观看视频| 亚洲AV无码一区东京热久久| 亚洲高清视频免费| 亚洲暴爽av人人爽日日碰| 亚洲天堂中文字幕在线| 免费女人高潮流视频在线观看| 激情亚洲一区国产精品| 亚洲AV中文无码乱人伦| 久久精品视频免费看| 99亚偷拍自图区亚洲| 亚洲精品和日本精品| 91福利免费视频| 久久久久久久久无码精品亚洲日韩| 亚洲日韩国产成网在线观看 | 99在线热视频只有精品免费| 亚洲中文字幕精品久久| 久久久久亚洲精品无码网址| 亚洲成人免费电影| 无码毛片一区二区三区视频免费播放| 亚洲精品高清国产一久久|