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

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

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

    Terry.Li-彬

    虛其心,可解天下之問;專其心,可治天下之學;靜其心,可悟天下之理;恒其心,可成天下之業(yè)。

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks

    準備:

    兩個表(實體), 1對多雙向關聯(lián):

    班級: Clazz (id, name)

    學生: Student(id, name , class_id)

    1. 查詢持久化對象  

    1.1 簡單查詢,返回數(shù)據(jù)庫結構
    1. sql = "select c.* from clazz c,student s where s.class_id = c.id";     
    2.   
    3. List<Clazz> clazzs = (List<Clazz>)session.createSQLQuery(sql).list();  

    特別注意:返回結果是Object[]組成的List,通過Object下標訪問屬性

    使用場合:非基于對象的查詢,復雜查詢

    1.2 簡單查詢,返回持久化對象

      sql = "select c.* from Clazz c , student s where s.class_id = c.id ";    List<Clazz> clazzs = (List<Clazz>) session.createSQLQuery(sql).addEntity(Clazz.class).list();

    特別注意: 1.addEntity方法指定返回包含Clazz對象的List 2. 查詢出來的持久態(tài)對象,clazz對象的studets屬性是各代理對象,訪問的時候才會去查詢DB 使用場合:基于對象的查詢,但對象簡單查詢

    1.3 多表查詢,返回多個實體
    1. String sql = "select {c.*}, {s.*} from Clazz c , student s where s.class_id = c.id   ";  
    2.   
    3. List<Clazz> clazzs = (List<Clazz>) session().createSQLQuery(sql)  
    4.   
    5.                                  .addEntity("c", Clazz.class)  
    6.   
    7.                                  .addEntity("s", Student.class).list();  
    1. 特別注意:   
    2. 1. addEntity方法指定了當前返回實體的別名,而且在SQL語句里使用{c.*}這樣的語句,  
    3. 它的意思是向別名為c的這個對象注入所有屬性值.  
    1. 2. 這個查詢會返回一個Object的List,每個Object包含兩個對象一個Clazz,一個Student  
    1. 3. {}占位符里是對象的屬性,而非列名,如{s.class},而非{s.class_id}  
    1. 4. 必須注入對象的每個屬性值,你可以使用{c.*},或者手工寫全所有,但必須是所有屬性。(這個太讓我郁悶了。   
    1. 使用場合:基于對象的查詢,復雜查詢  

    1.4  多表查詢,返回關聯(lián)實體

    1. String sql = "select {c.*}, {s.*} from Clazz c , student s where s.class_id = c.id   ";  
    2.   
    3. List<Clazz> clazzs = (List<Clazz>) session().createSQLQuery(sql)  
    4.   
    5.         .addEntity("c", Clazz.class)  
    6.   
    7.         .addJoin("s", "c.students").list();  
    1. <p>特別注意: 這塊有些問題,明明應該返回Clazz的List的,但確返回包含Clazz和Student的Object的List, faint</p><p>使用場合:基于對象的查詢,復雜查詢</p>  

    2. 查詢托管對象

    1. String sql = "select c.id, c.name from Clazz c , student s where s.class_id = c.id   ";     
    2.   
    3. List<Clazz> clazzs = (List<Clazz>) session.createSQLQuery(sql)        
    4.   
    5.                                      .addScalar("id", Hibernate.LONG)  
    6.   
    7.                                      .addScalar("name", Hibernate.STRING)       
    8.   
    9.                                      .setResultTransformer(Transformers.aliasToBean(Clazz.class)).list();  

    特別注意:

    1. 如果不設置addScalar方法可能會報轉型錯誤的異常.

    2.托管查詢可以使用投影,只查詢指定的列屬性

    posted on 2008-09-04 17:35 禮物 閱讀(883) 評論(0)  編輯  收藏 所屬分類: Java
    主站蜘蛛池模板: 亚洲中文字幕无码一久久区| a级毛片免费观看在线| 午夜免费福利在线| 国产精品亚洲视频| 久久免费动漫品精老司机| 亚洲午夜精品一区二区公牛电影院| 成人黄动漫画免费网站视频| 老司机午夜免费视频| 久久久亚洲精品视频| 直接进入免费看黄的网站| 亚洲国产成人一区二区精品区| 四虎影视久久久免费| 免费看香港一级毛片| 全黄大全大色全免费大片| 色老板亚洲视频免在线观| 久久久免费的精品| 亚洲hairy多毛pics大全| 亚欧免费视频一区二区三区| 国产亚洲精品一品区99热| 成人毛片免费观看视频| 国产免费AV片在线观看| 亚洲精品中文字幕乱码三区| 性感美女视频免费网站午夜| 十八禁视频在线观看免费无码无遮挡骂过 | 人禽伦免费交视频播放| 国产亚洲精品a在线观看| 精品久久久久久久久免费影院| 一区二区3区免费视频| 亚洲日韩国产一区二区三区| 成年在线观看网站免费| 亚洲综合无码一区二区痴汉| 亚洲AV永久无码精品| 免费一看一级毛片| 深夜免费在线视频| 亚洲熟妇丰满xxxxx| 亚洲美女色在线欧洲美女| 精品一区二区三区无码免费视频| 国产亚洲视频在线观看| 国产亚洲精aa在线看| 亚洲精品视频在线免费| 久久久亚洲精品国产|