HibernateTemplate简单描述

Hibernate Template还是比较常用的,于是我研究了一下spring Hibernate源代码,在这里拿出来和大家分享一下,希望对大家有用。

创新互联专注于习水企业网站建设,成都响应式网站建设公司,电子商务商城网站建设。习水网站建设公司,为习水等地区提供建站服务。全流程按需定制开发,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务

spring的Hibernate Template的execute方法提供的回调接口具有Session作为参数,但是实际上,默认情况下,Hibernate Template传递给回调接口的session并不是org.hibernate.impl.SessionImpl类,而是SessionImpl类的一个Proxy类。之所以替换成为一个Proxy类,Hibernate Template的注释说明,Proxy提供了一些额外的功能,包括自动设置Cachable,Transaction的超时时间,Session资源的更积极的关闭等等。

 
 
 
  1. private boolean exposeNativeSession = false;  
  2. ...  
  3. execute方法内部:  
  4.  
  5. Session sessionToExpose = (exposeNativeSession ? session : createSessionProxy(session)); 

但是遗憾的是,Hibernate的DetachedCriteria的setExecutableCriteria方法却要求将session参数强制转为SessionImpl,但是spring传过来的却是一个Proxy类,因此就报错了。

 
 
 
  1. public Criteria getExecutableCriteria(Session session) {  
  2. impl.setSession( (SessionImpl) session );   
  3. // 要求SessionImpl,Spring传递的是Proxy  
  4. return impl;  

解决方法,禁止Spring的Hibernate Template传递Proxy类,强制要求它传递真实的SessionImpl类,即给exexute方法增加一个参数,提供参数为true,如下:

 
 
 
  1. public List findByCriteria(final DetachedCriteria detachedCriteria) {  
  2. return (List) getHibernateTemplate().execute(new HibernateCallback() {  
  3. public Object doInHibernate(Session session) throws HibernateException {  
  4. Criteria criteria = detachedCriteria.getExecutableCriteria(session);  
  5. return criteria.list();  
  6. }  
  7. }, true);  

附一个进行模糊查询的例子:

 
 
 
  1. public PaginationSupport findPageByCriteria(int startIndex, int pageSize, 
    String sortColumnId, Boolean bSortOrder, final String likeValue) {  
  2. DetachedCriteria detachedCriteria = DetachedCriteria .forClass(Time.class);  
  3. // like condition  
  4. if ((likeValue != null && likeValue.trim().length() > 0)) {  
  5. detachedCriteria.add(Restrictions.or(Restrictions.sqlRestriction
    ("statime like ?", "%" + likeValue + "%", Hibernate.STRING),Restrictions.
    sqlRestriction("endtime like ?", "%" + likeValue + "%", Hibernate.STRING)));  

网站标题:HibernateTemplate简单描述
文章起源:http://www.gawzjz.com/qtweb/news37/165887.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联