温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Hibernate中Template如何使用

发布时间:2021-07-20 11:20:52 来源:亿速云 阅读:178 作者:Leah 栏目:编程语言

这篇文章给大家介绍Hibernate中Template如何使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

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

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

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

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

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

public List findByCriteria(final DetachedCriteria detachedCriteria) {  return (List) getHibernateTemplate().execute(new HibernateCallback() {  public Object doInHibernate(Session session) throws HibernateException {  Criteria criteria = detachedCriteria.getExecutableCriteria(session);  return criteria.list();  }  }, 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)));  

关于Hibernate中Template如何使用就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI