<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對多雙向關(guān)聯(lián):

    班級: Clazz (id, name)

    學生: Student(id, name , class_id)

    1. 查詢持久化對象  

    1.1 簡單查詢,返回數(shù)據(jù)庫結(jié)構(gòu)
    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();  

    特別注意:返回結(jié)果是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  多表查詢,返回關(guān)聯(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. 如果不設(shè)置addScalar方法可能會報轉(zhuǎn)型錯誤的異常.

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

    posted on 2008-09-04 17:35 禮物 閱讀(880) 評論(0)  編輯  收藏 所屬分類: Java
    主站蜘蛛池模板: 国产一级淫片a免费播放口| 亚洲va无码va在线va天堂| 久久这里只精品国产免费10| 亚洲精品无码成人| 精品亚洲国产成AV人片传媒| 国产成人精品日本亚洲专区| 日本人护士免费xxxx视频| av大片在线无码免费| 一级毛片免费观看不卡视频| 久久九九久精品国产免费直播| 国产精品亚洲综合一区在线观看| 激情五月亚洲色图| 亚洲最大在线观看| 亚洲专区先锋影音| 亚洲2022国产成人精品无码区| 亚洲乱色熟女一区二区三区丝袜| 免费一级黄色毛片| 国产91久久久久久久免费| 麻豆国产人免费人成免费视频 | 国产偷窥女洗浴在线观看亚洲| 午夜无遮挡羞羞漫画免费| 最新中文字幕免费视频| 久草视频在线免费| 国产精品1024永久免费视频 | 亚洲日本va午夜中文字幕一区| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 成人毛片免费观看视频在线| 国产a视频精品免费观看| 亚洲精品视频在线免费| 最近中文字幕免费mv在线视频| 91精品视频在线免费观看| 最近免费中文字幕mv在线电影| 99精品视频在线观看免费播放| 亚洲午夜免费视频| 四虎1515hh永久久免费| 国国内清清草原免费视频99| 毛片免费vip会员在线看| 免费观看大片毛片| 天堂亚洲免费视频| 国产亚洲情侣一区二区无码AV| 亚洲人成无码www久久久|