Hibernate Template简单描述
创始人
2024-06-07 20:41:22
0

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)));  

【编辑推荐】

  1. Hibernate Util简单讨论
  2. 详解优化Hibernate性能经验
  3. 概述Hibernate dbcp连接池使用方法
  4. 浅析Hibernate.cfg.xml配置
  5. Hibernate Shard基础分析

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...