<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)  編輯  收藏


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


    網站導航:
     
    主站蜘蛛池模板: 亚洲国产精品久久久天堂| 亚洲国产aⅴ综合网| 久久精品视频亚洲| 最近中文字幕大全免费版在线| 亚洲伊人成无码综合网 | 亚洲av无码一区二区三区网站| 国产高潮流白浆喷水免费A片 | 亚洲无码精品浪潮| 四虎影视无码永久免费| 亚洲高清专区日韩精品| 91热久久免费精品99| 国产精品亚洲午夜一区二区三区| 成人片黄网站色大片免费| 苍井空亚洲精品AA片在线播放| 免费一级毛片不卡在线播放| 一级特黄aaa大片免费看| 亚洲线精品一区二区三区影音先锋| 丁香花在线视频观看免费 | 亚洲AV永久无码精品一百度影院| 日韩a级无码免费视频| 亚洲高清无在码在线电影不卡| 国产1024精品视频专区免费| 亚洲欧美日韩综合俺去了| 亚洲成A人片在线观看中文| 国产亚洲精品免费视频播放| 久久亚洲sm情趣捆绑调教| 成人毛片免费播放| www免费插插视频| 亚洲欧洲综合在线| 四虎影视永久免费观看网址| 免费污视频在线观看| 亚洲黄页网在线观看| 精品国产亚洲男女在线线电影| 久久免费视频99| 亚洲大码熟女在线观看| 国产日韩亚洲大尺度高清| 成人免费看黄20分钟| 伊人免费在线观看高清版| 亚洲一区精彩视频| 亚洲日本va在线视频观看| 在线观看特色大片免费视频|