瘋狂

          STANDING ON THE SHOULDERS OF GIANTS
          posts - 481, comments - 486, trackbacks - 0, articles - 1
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          hibernate annoation (十 映射查詢(xún))

          Posted on 2009-08-20 17:26 瘋狂 閱讀(1580) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): java

          在類(lèi)級(jí)別上配置:

           @Entity
          @NamedQueries(value = { @NamedQuery(name="query1",query="select a from A a") })
          

           

             此查詢(xún)是sessionfactory級(jí)別的也就是在創(chuàng)建sessionfactory時(shí)候已經(jīng)處于內(nèi)存中了

          可以在任何地方使用。

          調(diào)用:

          Query q = session.getNamedQuery("query1");

           可同時(shí)配置多個(gè)

          @Entity
          @NamedQueries(
          value = {
          @NamedQuery(name="query1",query="select c from A c where c.id=:id") ,
          @NamedQuery(name="query2",query="select c from C c where c.id=:id")
          }
          )

           還可以通過(guò)hints屬性設(shè)置查詢(xún)屬性:

          例如:設(shè)置超時(shí)

          @NamedQuery(name="query2",query="select c from A c where c.id=?",hints=@QueryHint(name = "timeout", value = "20")

           屬性說(shuō)明:

           

          cacheable 是否可以與二級(jí)緩存交互(默認(rèn)false)
          cacheRegion 設(shè)置緩存名稱(chēng)(默認(rèn)othewise)
          timeout 查詢(xún)超時(shí)設(shè)定
          fetchSice 所獲取的結(jié)果集大小
          flushMode 本次查詢(xún)所用的刷新模式
          cacheMode 本次查詢(xún)所用的緩存模式
          readOnly 是否將本次查詢(xún)所加載的實(shí)體設(shè)為只讀(默認(rèn)false)
          comment 將查詢(xún)注釋下如所生成的sql

           

           映射本地化查詢(xún)(普通sql查詢(xún)):

          使用:@NamedNativeQueries和@SqlResultSetMappings

          例如:

          @Entity
          @NamedNativeQueries(value={@NamedNativeQuery(name="nativesql1", query="select *  from b where id>1",resultSetMapping="sql1maping")})
          @SqlResultSetMappings(value={@SqlResultSetMapping(name="sql1maping",entities={@EntityResult(entityClass=B.class
          )})})
          public class B{}
          

           測(cè)試:

           

          Query q = session.getNamedQuery("nativesql1");

           可使用@EntityResult的fields屬性來(lái)檢索固定字段:

          @Entity
          @NamedNativeQueries(value={@NamedNativeQuery(name="nativesql1", query="select  bname  from b where id>1",resultSetMapping="sql1maping")})
          @SqlResultSetMappings(value={@SqlResultSetMapping(name="sql1maping",entities={@EntityResult(entityClass=B.class,fields={
          @FieldResult(name="bname",column="bname")
          })})})
          public  class B{}

           測(cè)試:

          Query q = session.getNamedQuery("nativesql1");
          List<B> list = q.list();
          for (Iterator iterator = list.iterator(); iterator.hasNext();) {
          B a2 = (B) iterator.next();
          System.out.println(a2.getBname());
          }

           此時(shí)如果要顯示:System.out.println(a2.getId());則會(huì)報(bào): could not execute query ---Column 'id1_0_' not found.異常

           



          主站蜘蛛池模板: 江城| 离岛区| 开封县| 无极县| 瓮安县| 宁海县| 万源市| 石首市| 盐池县| 晋城| 贵港市| 沿河| 宝坻区| 天镇县| 阿荣旗| 青冈县| 化德县| 屯留县| 天水市| 伊通| 本溪| 若羌县| 大埔县| 吴江市| 天柱县| 虞城县| 五原县| 中江县| 通化市| 克拉玛依市| 涡阳县| 永年县| 永泰县| 稻城县| 海晏县| 四会市| 灵山县| 兴文县| 塔城市| 潞城市| 抚宁县|