A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Hibernate和Spring的关系
hibernate中的一些对象可以给Spring来管理,让Spring容器来创建hibernate中一些对象实例化。例如:SessionFactory,HibernateTemplate等。
Hibernate本来是对数据库的一些操作,放在DAO层,而Spring给业务层的方法定义了事务,业务层调用DAO层的方法,很好的将Hibernate的操作也加入到事务中来了。
Hibernate自带的分页机制是什么?如果不使用Hibernate自带的分页,则采用什么方式分页?
   1、hibernate自带的分页机制:获得Session对象后,从Session中获得Query对象。用Query.setFirstResult():设置要显示的第一行数据, Query.setMaxResults():设置要显示的最后一行数据。
  2、不使用hibernate自带的分页,可采用sql语句分页,
hibernate的延迟加载和openSessionInView
延迟加载要在session范围内,用到的时候再加载;opensessioninview是在web层写了一个
filter来打开和关闭session,这样就表示在一次request过程中session一直开着,保证了延迟
加载在session中的这个前提。
update()和saveOrUpdate()的区别?
save()和update()的区别在于一个是将瞬时态对象变成持久态,一个是将游离态对象变为持久态。saveOrUpdate()这个方法是更新或者插入,有主键就执行更新,如果没有主键就执行插入。
load()和get()的区别?
1.如果没有找到符合条件的记录,get方法返回null,load方法抛出异常。
2.get方法直接返回实体类对象,load方法返回实体类对象的代理。
3.在Hibernate 3之前,get方法只在一级缓存中进行数据查找,如果没有找到对应的数据则越过二级缓存,直接发出SQL语句完成数据读取;load方法则可以从二级缓存中获取数据;从Hibernate 3开始,get方法不再是对二级缓存只写不读,它也是可以访问二级缓存的。
说明:对于load()方法认为该数据在数据库中一定存在可以放心的使用代理来实现延迟加载,如果没有数据就抛出异常,而通过get()方法获取的数据可以不存在。
Hibernate都支持哪些缓存策略
R ead-only: 这种策略适用于那些频繁读取却不会更新的数据,这是目前为止最简单和最有效的缓存策略
Read/write:这种策略适用于需要被更新的数据,比read-only更耗费资源,
Nonstrict read/write: 这种策略不保障两个同时进行的事务会修改同一块数据,这种策略适用于那些经常读取但是极少更新的数据
Transactional: 这种策略是完全事务化的缓存策略
fetch属性:
1、fetch="join":主体对象和关联对象用一句外键关联的sql同时查询出来,不会形成多次查询。
2、fetch="select":select方式时先查询返回要查询的主体对象(列表),再根据关联外键id,每一个对象发一个select查询,获取关联的对象,形成n+1次查询(1是查询主体对象的sql语句,n是根据这个列表中的n条记录的外键id查询的sql语句)。如果关联对象是延迟加载的,则在查询到主体对象后,不会根据关联外键id获取关联对象。
   


1 个回复

倒序浏览
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马