Hibernate对象关系映射总结
10. uniqueResult方法查询(查询结果只能是一个字段)
Query q = session.createQuery("select count(*) from Employer"); Long count = (Long)q.uniqueResult();
11. Criteria查询(通过面向对象化的设计,将数据查询条件封装为一个对象)
Criteria c = session.createCriteria(Employer.class);
c.addOrder(Order.asc("sal")); //按薪水升序查询 c.setFirstResult(3); c.setMaxResults(3); List list = c.list(); for(int i=0;i<list.size();i++){ Employer emp = (Employer)list.get(i); System.out.println(emp.getEname() + " : " + emp.getSal());
}
====================================hibernate级联=与抓取===================================== 用户组---用户关系: 一对多:
1:@OneToMany(mappedBy="group88888",cascade={CascadeType.ALL},fetch=FetchType.EAGER) 这里如果设置了EAGER:则查主表数据会立即取从表的数据:默认的是:fetch=http://www.77cn.com.cnZY 多对一:
@ManyToOne(cascade={CascadeType.ALL},fetch=FetchType.EAGER)
这里如果设置了lazy:则查从表数据不会包含主表的数据:默认的是:fetch=FetchType.EAGER 其他的对象关系同样理解。
====================================hibernate的缓存========================================== 1: Session 级别的缓存,它同session邦定。它的生命周期和session相同。Session消毁,它也同时消毁,管理一级缓
存,一级缓存无法取消,用两个方法管理,clear(),evict()
2.两个session 不能共享一级缓存,因它会伴随session的生命周期的创建和消毁; 3.Session缓存是实体级别的缓存,就是只有在查询对象级别的时候才使用,如果
使用HQL和SQL是查询属性级别的,是不使用一级缓存的!切记!!!!
4: iterate 查询使用缓存,list()是通过一条SELECT SQL语句实现查询操作;而iterate()则是N+1次的SELECT
SQL语句实现查询操作,第一次它获取了所有的ID,然后再根据每个id查询所对应的对象,所以会有N+1问题出现。 查询N个对象会发N+1条sql语句。
get()和load(),iterate方法都会使用一级缓存 一级缓存无法取消,但可以管理
管理一级缓存的方法: session.clear() session.evict()
如何避免一次性大量的实体数据入库导致内存溢出: 先flush,再clear
一级缓存是缓存实体对象:如果查询普通属性,一级缓存不会缓存,会发出sql 如下:
Iterator<Category> categories2 = (Iterator<Category>)session.createQuery("select http://www.77cn.com.cn from Category a").iterate();
Hiberante3 二级缓存总结
二级缓存也称进程级的缓存或SessionFactory级的缓存,二级缓存可以被所有的session共享 二级缓存的生命周期和SessionFactory的生命周期一致,SessionFactory可以管理二级缓存
1.Hibernate3的(sessionFactory)二级缓存和session级别的缓存一样都只对实体对象做缓存,不对属性级别的查询做缓存
二级缓存的生命周期和sessionFactory的生命周期是一样的,sessionFactory可以管理二级缓存;
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库Hibernate对象关系映射总结(14)在线全文阅读。
相关推荐: