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

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

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

    爪哇一角

    共同探討STRUTS#HIBERNATE#SPRING#EJB等技術
    posts - 3, comments - 6, trackbacks - 0, articles - 99
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理
    現在的系統中雖然使用了。Hibernate但是沒有使用Hibernate的關聯關系來進行數據庫操作。所有的管理操作都是單獨實現的。所以也不能用Criteria.add()這種方式去查詢關聯的一方。所以只能用Native SQL去查詢結果返回對象了。按照Hibernate3的reference里面說的

    16.1.?使用SQLQuery

    對原生SQL查詢執行的控制是通過SQLQuery接口進行的,通過執行Session.createSQLQuery()獲取這個接口。最簡單的情況下,我們可以采用以下形式:

    List cats = sess.createSQLQuery("select * from cats")
    .addEntity(Cat.class)
    .list();

    這個查詢指定了:

    • SQL查詢字符串

    • 查詢返回的實體

    這里,結果集字段名被假設為與映射文件中指明的字段名相同。對于連接了多個表的查詢,這就可能造成問題,因為可能在多個表中出現同樣名字的字段。下面的方法就可以避免字段名重復的問題:

    List cats = sess.createSQLQuery("select {cat.*} from cats cat")
    .addEntity("cat", Cat.class)
    .list();

    這個查詢指定了:

    • SQL查詢語句,它帶一個占位符,可以讓Hibernate使用字段的別名.

    • 查詢返回的實體,和它的SQL表的別名.

    addEntity()方法將SQL表的別名和實體類聯系起來,并且確定查詢結果集的形態。

    addJoin()方法可以被用于載入其他的實體和集合的關聯.

    List cats = sess.createSQLQuery(
    "select {cat.*}, {kitten.*} from cats cat, cats kitten where kitten.mother = cat.id"
    )
    .addEntity("cat", Cat.class)
    .addJoin("kitten", "cat.kittens")
    .list();

    原生的SQL查詢可能返回一個簡單的標量值或者一個標量和實體的結合體。

    Double max = (Double) sess.createSQLQuery("select max(cat.weight) as maxWeight from cats cat")
    .addScalar("maxWeight", Hibernate.DOUBLE);
    .uniqueResult();

    除此之外,你還可以在你的hbm文件中描述結果集映射信息,在查詢中使用。

    List cats = sess.createSQLQuery(
    "select {cat.*}, {kitten.*} from cats cat, cats kitten where kitten.mother = cat.id"
    )
    .setResultSetMapping("catAndKitten")
    .list();

    后來我使用了命名SQL查詢方式。

    16.3.?命名SQL查詢

    可以在映射文檔中定義查詢的名字,然后就可以象調用一個命名的HQL查詢一樣直接調用命名SQL查詢.在這種情況下,我們 需要調用addEntity()方法.

    <sql-query name="persons">
    <return alias="person" class="eg.Person"/>
    SELECT person.NAME AS {person.name},
    person.AGE AS {person.age},
    person.SEX AS {person.sex}
    FROM PERSON person
    WHERE person.NAME LIKE :namePattern
    </sql-query>
    List people = sess.getNamedQuery("persons")
    .setString("namePattern", namePattern)
    .setMaxResults(50)
    .list();


    我覺得這種發式比較好。這樣寫出來的sql可以很整齊。我們的數據庫使用的是oracle,不過按照這上面的寫法發現sql語句有錯誤。
    后來拿到控制臺執行也抱錯。因為原來都用sqlserver,而sqlserver都是可以的。后來發現是表不能有別名改成這樣就好了。
    ????????????SELECT?T_PAY.sys_id?as?{pay.sysId},
    ???????????????????T_PAY.sys_flag?
    as?{pay.sysFlag},
    ???????????????????T_PAY.sys_domain?
    as?{pay.sysDomain},
    ???????????????????T_PAY.sys_owner?
    as?{pay.sysOwner},
    ???????????????????T_PAY.sys_create_date?
    as?{pay.sysCreateDate},
    ???????????????????T_PAY.sys_update_date?
    as?{pay.sysUpdateDate},
    ???????????????????T_PAY.pay_id?
    as?{pay.payId},
    ???????????????????T_PAY.pay_name?
    as?{pay.payName},
    ???????????????????T_PAY.pay_type_id?
    as?{pay.payTypeId},
    ???????????????????T_PAY.pay_date?
    as?{pay.payDate},
    ???????????????????T_PAY.money_type_id?
    as?{pay.moneyTypeId},
    ???????????????????T_PAY.amount?
    as?{pay.amount},
    ???????????????????T_PAY.payer_id?
    as?{pay.payerId},
    ???????????????????T_PAY.payer_name?
    as?{pay.payerName},
    ???????????????????T_PAY.accept_id?
    as?{pay.acceptId},
    ???????????????????T_PAY.accept_name?
    as?{pay.acceptName},
    ???????????????????T_PAY.pay_state_id?
    as?{pay.payStateId},
    ???????????????????T_PAY.remark?
    as?{pay.remark}
    ????????????
    FROM???T_PAY
    ????????????
    JOIN???T_BIZ_PAY
    ????????????
    ON???????T_PAY.pay_id?=?T_BIZ_PAY.pay_id
    ????????????
    WHERE??T_BIZ_PAY.biz_id?=?:bizId
    ? 這里要特別的提醒一下大家千萬不要把主鍵忘了。剛開始我就忘了主鍵,后來調試了半天才找出原因來。

    這樣在sping里面用回調查詢一下就ok了。真的很方便.
    ????public?List?getPaysByBizId(final?String?bizId)?{
    ????????
    return?(List)getHibernateTemplate().execute(new?HibernateCallback(){
    ????????????
    public?Object?doInHibernate(Session?session)throws?HibernateException{
    ????????????????Query?query?
    =?session.getNamedQuery("find.pays.by.bizid");
    ????????????????query.setParameter(
    "bizId",bizId);
    ????????????????
    return?query.list();
    ????????????}
    ????????},
    true);
    ????}
    主站蜘蛛池模板: 曰批全过程免费视频在线观看无码 | 亚洲级αV无码毛片久久精品| 亚洲爆乳成av人在线视菜奈实 | 亚洲日韩AV一区二区三区中文| 五月婷婷在线免费观看| 亚洲黄色免费观看| 国产曰批免费视频播放免费s| 91亚洲国产成人久久精品网站| 中文字幕免费视频一| 久久精品国产亚洲av影院| 亚洲免费观看在线视频| 亚洲AV无码乱码麻豆精品国产| 在线看片免费不卡人成视频| 亚洲欧美成人一区二区三区| 国产公开免费人成视频 | 无码精品人妻一区二区三区免费看 | 亚洲六月丁香六月婷婷蜜芽| 成人免费无码大片A毛片抽搐色欲| 日韩色日韩视频亚洲网站| 亚洲女人被黑人巨大进入| a级毛片在线视频免费观看| 亚洲人成电影在线天堂| 无码国产精品一区二区免费式直播| 亚洲精品伊人久久久久| 国产又大又黑又粗免费视频 | 7m凹凸精品分类大全免费| 亚洲理论在线观看| 四虎影视免费在线| 国产精品美女久久久免费| 亚洲va在线va天堂va不卡下载| 亚洲免费在线视频播放| 亚洲国产精品自在自线观看| 亚洲男人的天堂在线va拉文 | 无码国模国产在线观看免费| 精品多毛少妇人妻AV免费久久| 亚洲天天做日日做天天欢毛片| 国产精品成人免费一区二区 | 亚洲Av高清一区二区三区| 亚洲午夜激情视频| 久久精品国产免费观看三人同眠| 亚洲av午夜电影在线观看|