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.異常