HibernateDaoSupport中的方法

才学想问下getHibernateTemplate().loadAll()和getHibernateTemplate().findByCriteria();具体有什么区别... 才学想问下getHibernateTemplate().loadAll()和 getHibernateTemplate().findByCriteria();
具体有什么区别,都是查找数据库中的数据的,它们有什么不一样的地方?谢谢!
展开
 我来答
who7708
2014-11-12 · TA获得超过122个赞
知道小有建树答主
回答量:238
采纳率:0%
帮助的人:74.5万
展开全部
两者基本都是差不多,要说区别的话,有两点:1.loadAll()不进行分页,findByCriteria()可以进行分页,2.传入的参数不一样,loadAll()传入是一个实体类,另一个传入的是Criteria(条件)。其次两者具体实现方式基本一样,都会调用:prepareCriteria(Criteria criteria)方法,如下:
protected void prepareCriteria(Criteria criteria) {
if (isCacheQueries()) {
criteria.setCacheable(true);
if (getQueryCacheRegion() != null) {
criteria.setCacheRegion(getQueryCacheRegion());
}
}
if (getFetchSize() > 0) {
criteria.setFetchSize(getFetchSize());
}
if (getMaxResults() > 0) {
criteria.setMaxResults(getMaxResults());
}
SessionFactoryUtils.applyTransactionTimeout(criteria, getSessionFactory());
}
loadAll()方法具体实现:
public <T> List<T> loadAll(final Class<T> entityClass) throws DataAccessException {
return executeWithNativeSession(new HibernateCallback<List<T>>() {
@SuppressWarnings("unchecked")
public List<T> doInHibernate(Session session) throws HibernateException {
Criteria criteria = session.createCriteria(entityClass);
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
prepareCriteria(criteria);
return criteria.list();
}
});
}
findByCriteria()具体实现如下:
public List findByCriteria(final DetachedCriteria criteria, final int firstResult, final int maxResults)
throws DataAccessException {

Assert.notNull(criteria, "DetachedCriteria must not be null");
return executeWithNativeSession(new HibernateCallback<List>() {
public List doInHibernate(Session session) throws HibernateException {
Criteria executableCriteria = criteria.getExecutableCriteria(session);
prepareCriteria(executableCriteria);
if (firstResult >= 0) {
executableCriteria.setFirstResult(firstResult);
}
if (maxResults > 0) {
executableCriteria.setMaxResults(maxResults);
}
return executableCriteria.list();
}
});
}
基本一致。两者都会先去看缓存里有没有,如果没有再去查询数据库。还请多看下源码。谢谢
颜小二述哲文
高粉答主

2015-08-11 · 研习社优秀文员
颜小二述哲文
采纳数:3386 获赞数:103662

向TA提问 私信TA
展开全部
1、/**
* 删除记录
* @param entity BO的对象
* <pre>
* this.getHibernateTemplate().delete(entity);
* 按照规范,调用ECLRecordDelete记录删除的BO信息;
* </pre>
*/
public void delete(Object entity){
this.getHibernateTemplate().delete(entity);
}
2、  /**
* 通过id获得记录
* @param Class entityClass,对象类型
* @param Serializable id,BO的id值
* <pre>
* return hibernateTemplate.get(entityClass,id);
* </pre>
*/
public Object findById(Class entityClass, Serializable id) {
return this.getHibernateTemplate().get(entityClass,id);
}

3、/**
* 获得延迟加载数据
* @param Object object,需要加载的对象
* <pre>
* Hibernate.initialize(object);
* </pre>
*/
public void getLazyData(Object object) {
this.getHibernateTemplate().initialize(object);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式