热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

spring3.*+hibernate3.*整合常见问题总结

1、为了解决应用中的中文乱码问题,我们可以不用自己开发过滤器类,Spring为我们提供了一个,只需要配置一下即可:<!--解决乱码问题--><filter>

1、为了解决应用中的中文乱码问题,我们可以不用自己开发过滤器类,Spring为我们提供了一个,只需要配置一下即可:

  
  
    CharacterFilter
    org.springframework.web.filter.CharacterEncodingFilter
    
      encoding
      UTF-8
    

  

  
    CharacterFilter
    /*
  

该类的继承结构如下

  

该类如下

public class CharacterEncodingFilter extends OncePerRequestFilter {

  private String encoding;

  private boolean forceEncoding = false;


  public void setEncoding(String encoding) {
    this.encoding = encoding;
  }


  public void setForceEncoding(boolean forceEncoding) {
    this.forceEncoding = forceEncoding;
  }

  @Override
  protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException  {

  if (this.encoding != null && (this.forceEncoding || request.getCharacterEncoding() == null))

  {
    request.setCharacterEncoding(this.encoding);
    if (this.forceEncoding)

    {
      response.setCharacterEncoding(this.encoding);
    }
  }
    filterChain.doFilter(request, response);
  }

}

 

 

2、为了解决hibernate延迟加载的问题,使用Spring中提供的过滤器来解决,它能够让Session

  在请求解释完成之后再关闭,配置方式如下:

  同时解决Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from

  org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition. 

问题:只读模式下(FlushMode.NEVER/MANUAL)写操作不被允许:把你的Session改成FlushMode.COMMIT/AUTO或者清除事务定义中的readOnly标记。

  
    OpenSessionInViewFilter
    org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
    
      sessionFactoryBeanName
      sessionFactory
    

    
      singleSession
      true
    

    
      flushMode
      AUTO
    

  

该过滤器并不需要如下配置--> 配置之后就会出现删除或者修改不执行,添加,查询能够正常

  
    OpenSessionInViewFilter
    /*
  

3、因为OpenSessionInViewFilter在getSession的时候,会把获取回来的session的flush mode 设为FlushMode.NEVER。故进行insert、 update和delete操作时会产生异常:org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition. 因此需要采用spring的事务声明,使方法受transaction控制:

 




  

 



  
  
     expression="execution(* com.zhao.user.service.*.*(..))" />
  
  


  
  
  
  
  
  
  
  
  

 

4、部署应用程序,启动服务器,如果发现异常: java.lang.NoSuchMethodError:   org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V

  这是由于整合时Jar包的冲突引起的。应将"Web应用程序/WEB-INF/lib/asm-2.2.3.jar"删除即可。

 

 


推荐阅读
author-avatar
真真贱贱_474
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有