Java代码
@Entity
@NamedQueries(value = { @NamedQuery(name="query1",query="select a from A a") })
此查询是sessionfactory级别也就是在创建sessionfactory时候已经处于内存中了
可以在任何地方使用
:
Java代码
Query q = session.getNamedQuery("query1");
可同时配置多个
Java代码
@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")
}
)
还可以通过hs属性设置查询属性:
例如:设置超时
Java代码
@NamedQuery(name="query2",query="select c from A c where c.id=?",hs=@QueryH(name = "timeout", value = "20")
属性介绍说明:
cacheable 是否可以和 2级缓存Cache交互(默认false)
cacheRegion 设置缓存Cache名称(默认othewise)
timeout 查询超时设定
fetchSice 所获取结果集大小
flushMode 本次查询所用刷新模式
cacheMode 本次查询所用缓存Cache模式
readOnly 是否将本次查询所加载实体设为只读(默认false)
comment 将查询注释下如所生成sql
映射本地化查询(普通sql查询):
使用:@NamedNativeQueries和@SqlResultSetMappings
例如:
Java代码
@Entity
@NamedNativeQueries(value={@NamedNativeQuery(name="nativesql1", query="select * from b where id>1",resultSetMapping="sql1maping")})
@SqlResultSetMappings(value={@SqlResultSetMapping(name="sql1maping",entities={@EntityResult(entityClass=B.
)})})
public B{}
测试:
Java代码
Query q = session.getNamedQuery("nativesql1");
可使用@EntityResultfields属性来检索固定字段:
Java代码
@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.,fields={
@FieldResult(name="bname",column="bname")
})})})
public B{}
测试:
Java代码
Query q = session.getNamedQuery("nativesql1");
List<B> list = q.list;
for (Iterator iterator = list.iterator; iterator.hasNext;) {
B a2 = (B) iterator.next;
.out.prln(a2.getBname);
}
此时如果要显示:.out.prln(a2.getId);则会报: could not execute query ---Column 'id1_0_' not found.异常
最新评论