<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鲁丝一区二区三区| 一级A毛片免费观看久久精品 | 亚洲一区在线观看视频| 99久久久国产精品免费牛牛四川| 国产亚洲av片在线观看16女人| 好紧我太爽了视频免费国产 | 亚洲а∨天堂久久精品9966| 日韩欧毛片免费视频| 国产成人精品日本亚洲网址| 成人五级毛片免费播放| 理论亚洲区美一区二区三区| 亚洲乱亚洲乱少妇无码| 中文字幕免费在线看线人动作大片| 亚洲女初尝黑人巨高清| 91福利免费视频| 亚洲人成网站色7799| 免费v片视频在线观看视频| 国产性生大片免费观看性| 久久青青草原亚洲av无码app | 亚洲人成网亚洲欧洲无码久久| 精品亚洲永久免费精品| 亚洲AV无码乱码在线观看代蜜桃 | 亚洲一区二区久久| 免费少妇a级毛片人成网| 免费一区二区无码东京热| 久久亚洲精品成人AV| 国产最新凸凹视频免费| 99在线免费观看| 亚洲天堂2016| 国产乱辈通伦影片在线播放亚洲 | 鲁丝片一区二区三区免费| 亚洲三级在线播放| 四虎影视永久免费视频观看| 97在线免费视频| 亚洲日韩精品国产一区二区三区| 国产成人99久久亚洲综合精品| 50岁老女人的毛片免费观看| 国产精品亚洲综合一区在线观看| 久久国产精品亚洲一区二区|