瘋狂

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

          hibernate annoation (十 映射查詢)

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

          在類級別上配置:

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

           

             此查詢是sessionfactory級別的也就是在創建sessionfactory時候已經處于內存中了

          可以在任何地方使用。

          調用:

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

           可同時配置多個

          @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")
          }
          )

           還可以通過hints屬性設置查詢屬性:

          例如:設置超時

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

           屬性說明:

           

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

           

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

          使用:@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{}
          

           測試:

           

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

           可使用@EntityResult的fields屬性來檢索固定字段:

          @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{}

           測試:

          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());
          }

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

           



          主站蜘蛛池模板: 隆尧县| 武汉市| 江孜县| 西峡县| 西华县| 鞍山市| 平潭县| 湖北省| 北海市| 叶城县| 侯马市| 济南市| 绩溪县| 连江县| 永城市| 安图县| 麦盖提县| 汶上县| 肇东市| 河曲县| 西吉县| 紫阳县| 湘乡市| 东乌珠穆沁旗| 都昌县| 河曲县| 延安市| 长岛县| 台南市| 宜昌市| 贵德县| 灌云县| 青海省| 茂名市| 墨玉县| 包头市| 甘南县| 榆树市| 河曲县| 呼玛县| 潞城市|