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

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

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

    自由飛翔

    我在仰望,java之上

    統計

    留言簿(2)

    我關注的blog

    閱讀排行榜

    評論排行榜

    hql如何解決聯合查詢了?

         最近在一次電話面試中,被問到這么個問題。
        文章參考: http://369619017.blog.163.com/blog/static/7628038520098186273313/ package com.shiryu.otm;

    import java.util.Iterator;

    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;

    //hql 的聯合查詢
    public class HqlTest {
        public static void main(String[] args) {
            SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();

            // 1.Inner Join 返回所有滿足關聯條件的記錄組合
            // 使用fetch關鍵字表明Address對象屬性讀出后立即填充到對應的User對象(addresses集合屬性)中
            // 如果不使用fetch 結果集中,每個條目都是一個Object數組
            Session session = sessionFactory.openSession();

            String hql = "from User user inner join fetch user.addresses";

            Iterator it = session.createQuery(hql).list().iterator();
            while (it.hasNext()) {
                User user = (User) it.next();
                System.out.println(user.getId() + " " + user.getName() + " " + user.getAddresses());
            }
            session.close();

            // 2.Left outer join
            // 返回User表中所有的記錄(hql中位于左側的表),及其對應的地址信息,如果沒有則用null代替
            Session session1 = sessionFactory.openSession();
            Transaction tr1 = session1.beginTransaction();

            String hql2 = "from User user left join fetch user.addresses";

            Iterator it2 = session1.createQuery(hql2).list().iterator();
            while (it2.hasNext()) {
                User user = (User) it2.next();
                System.out.println(user.getId() + " " + user.getName() + " " + user.getAddresses());
            }
            session1.close();
            // right outer join 則與left相反 fetch 對其無效
            // full join 是left outer join和right outer join的并集

            // 4.6.8子查詢的使用
            Session session2 = sessionFactory.openSession();
            Transaction tr2 = session2.beginTransaction();

            String hql3 = "from User user where (select count(*) from user.addresses)>1";

            Iterator it3 = session2.createQuery(hql3).list().iterator();
            while (it3.hasNext()) {
                User user = (User) it3.next();
                System.out.println(user.getId() + " " + user.getName());
            }
            session2.close();

            // hibernate 也提供sql查詢方式(有問題?)
            Session session3 = sessionFactory.openSession();
            Transaction tr3 = session3.beginTransaction();

            String sql = "select {user.*} from User as user";

            Iterator it4 = session3.createSQLQuery(sql).list().iterator();
            while (it4.hasNext()) {
                User user = (User) it4.next();
                System.out.println(user.getId() + " " + user.getName());
            }
        }

    } 

    Gavin

    posted on 2011-08-08 00:21 GavinMiao 閱讀(1633) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 国产乱辈通伦影片在线播放亚洲| 无码日韩人妻av一区免费| 国产免费人视频在线观看免费| 亚洲免费中文字幕| 麻豆成人久久精品二区三区免费| 日韩亚洲人成在线综合日本| 中文字幕高清免费不卡视频| 亚洲成av人影院| 最近免费中文字幕大全免费| 亚洲综合区图片小说区| 久久久高清免费视频 | 亚洲AV伊人久久青青草原| 无人视频在线观看免费播放影院 | 日韩在线天堂免费观看| 亚洲色一区二区三区四区| 国内一级一级毛片a免费| 婷婷国产偷v国产偷v亚洲| 亚洲综合亚洲综合网成人| a级日本高清免费看| 4444亚洲国产成人精品| 免费观看黄网站在线播放| 亚洲成av人无码亚洲成av人| 亚洲午夜福利精品久久| 久久99毛片免费观看不卡| 亚洲午夜在线一区| 国产做床爱无遮挡免费视频| 中文字幕在线免费视频| 亚洲美女aⅴ久久久91| 精品免费国产一区二区三区| 日本免费精品一区二区三区| 亚洲天堂中文资源| 午夜视频在线在免费| 免费无码又爽又刺激网站| 亚洲综合精品成人| 亚洲中文字幕无码一区二区三区| 永久在线观看www免费视频| 亚洲AV成人无码网站| 亚洲av无码专区在线播放| 天天拍拍天天爽免费视频| 一级毛片不卡免费看老司机| 亚洲精品综合久久中文字幕|