hibernate annoation (十 映射查询)

在类级别上配置:

 @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.异常

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值