`
kofsky
  • 浏览: 201821 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

Spring+Hibernate问题记录

阅读更多

1.BLOB查询时遇到异常:
testSaveOrUpdateOrList(net.kofsky.nmis.po.TestPO.TestMerchandisePO)
org.springframework.orm.hibernate3.HibernateJdbcException: JDBC exception on Hibernate data access; nested exception is org.hibernate.exception.GenericJDBCException:
could not initialize a collection: [net.kofsky.nmis.po.Merchandise.merImage#11]
Caused by: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Unsupported data conversion.
网上查阅得知微软提供的JDBC驱动bug甚多,并且不支持BLOB的部分操作

解决方案:将MS驱动换为:jtds-1.2.1.jar,重新配置数据源,Ok

2.Spring+Hibernate分页查询
  List tempList = hibernateTemplate.executeFind(new HibernateCallback() {
   public Object doInHibernate(Session session) {
    Query query = session.createQuery(hql);
    query.setFirstResult(start);
    query.setMaxResults(pageSize);
    List list = query.list();
    return list;
   }
  });

3.聚合查询问题
比如查询某个表单的所有记录,直接用SQL或者HQL都很简单,但用Spring+Hibernate却又麻烦一些
方法一:采用spring的回调方式
    final String tempHql = "select count(*) from " + PO;
    List record = hibernateTemplate
    .executeFind(new HibernateCallback() {
     public Object doInHibernate(Session session) {
      Query query = session.createQuery(tempHql);
      List list = query.list();
      return list;
     }
    });
    int recordCount=((Long)record.get(0)).intValue();//获取数值
方法二:

    String tempHql = "select count(*) from " + PO;
    int recordCount=((Long)hibernateTemplate.find(tempHql).iterator().next()).intValue();

4.Spring异常处理

  做了了三个简单的测试页面: 登录页面login.jsp, 登录成功页面index.jsp,失败页面error.jsp,配置一个登录控制器;调试过程中,一直由页面login.jsp跳入error.jsp,一直如此,没有任何异常和错误提示,用System.out.print跟踪到数据库操作代码的中间,然后中止了,不返回任何数据。找了半天错误,原来发现配置了Spring的异常处理:

<bean id="exceptionResolver"
  class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
  <property name="defaultErrorView">
   <value>error</value>
  </property>
  <property name="exceptionMappings">
  <props>
   <prop key="java.sql.SQLException">error</prop>
   <prop key="java.lang.RuntimeException">error</prop>
  </props>
  </property>
 </bean>

  在后台处理过程发生异常后,直接跳入了配置的error.jsp页面,因此不会输出任何异常。在调试时需要把这段去掉,跟踪可能出现的问题,待发布时再加入异常处理页面。

   这个问题也说明了单元测试的重要性,如果后台的操作全部经过了比较详尽的单元测试,那么出现这类问题的可能性就很小了。~~

5.插播一个:C++的临时指针问题

 FeatureGroup<featureType,resultType>* temp;//临时指针,用于遍历向量内数据
 for ( ; sIter != eIter; sIter++ )
 {    //operation based temp
 }

  循环内操作完毕以后,对临时指针不作任何处理。一般来讲是没啥问题了,只是用了一个临时空间而已,也没有delete操作,不会影响到原始向量空间内的数据。

  但事实并非如此,C++自动会将临时指针所指向的对象销毁,这样问题就出现了,当用了这段循环遍历的代码以后,发现最后向量的最后一个数据出现了混乱,完全不合常理。

  解决方案有三个:不用临时指针、将临时指针设置为全局变量、临时指针用完以后设置为NULL

  杨世泉说最后一个可能有问题,但我做ISODATA时大量采用了这种方式,似乎没有问题~~


 6.中文问题

  依稀记得,刚开始用java作网页的时候,被其中的编码问题弄的心力交瘁。在做页面之前,我似乎已经完全忘掉了这个问题。今天,又一次被这个问题难住了。

   完全让人头晕的东西,页面编码格式,内存中编码格式,传输编码格式,浏览器解码格式,数据库编码格式,数据库链接编码。。。。

   为了简单,我把所有涉及编码的地方都设置为gb2312,可惜,在页面提交后,到了web服务器端就出现了问题,变成乱码了。在服务器端,通过如下方法获得正常输出:

    new String(s.getBytes("8859_1"), "gb2312");(网络流中一般采用8859_1传输)

    可是不想每个参数都加入这么一句转换。网上查到两种解决方式:

   a 在web.xml中配置Spring的编码

  <filter>
  <filter-name>encodingFilter</filter-name>
  <filter-class>
   org.springframework.web.filter.CharacterEncodingFilter
  </filter-class>
  <init-param>
   <param-name>encoding</param-name>
   <param-value>gb2312</param-value>
  </init-param>
 </filter>

   b.在server.xml中<Connector  port="8080"...>属性中加入URIEncoding="gb2312"

  两种方法完全不起作用。很奇怪。将所有编码全部设成utf8,也是如此。只不过,在服务器端需要通过 new String(s.getBytes("8859_1"), "utf8")才能获得正常的参数了。

  郁闷,莫非真的要每个数据要要手工转换一下?!啊

  补记:解决了,web.xml加CharacterEncodingFilter时忘了加:

   <filter-mapping>
      <filter-name>encodingFilter</filter-name>
     <url-pattern>/*</url-pattern>
   </filter-mapping>

  加上就可以了。

7.极品问题:找不到某些文件

  jsp文件明明存在,访问服务器却显示文件不存在....用javascript读本地图像文件,文件明明在目录下面,硬是没办法加载....显出出来是一个一个的红叉叉.....这个问题俺被困扰多时,今天被一高人解决....晕惨啊.....

  原因:缓存问题....Eclipse没有编译部分文件,致使tomcat无法找到文件

  在工作目录下面,用工程项目的名称搜索,可以在eclipse的缓存中看到其自动编译的文件,会发现,凡是tomcat找不到的文件,这里都没有... 

  老夫的相对目录是..workplace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\NMisSystem\org\apache\jsp\等..(在工作目录的.metadata文件夹下搜一下就可以了,有多个)

  删之.....让eclipse rebuild项目.....

 8.Hibernate保存数据时错误:java.lang.ClassCastException: java.sql.Timestamp
/**
* @hibernate.property column="registerTime" type="java.sql.Date" length="50"
*/
错误原因:生成映射文件的注释里面,多了个length="50",呵呵,这是只有字符串才有的参数,如果字段是Date,是不应该有的

9.数据更新的时候一定要加上隐藏字段(JSTL作页面):
<spring:bind path="command.id">
<input type="hidden" value="<c:out value="${status.value}"/>" name="<c:out value="${status.expression}"/>">
</spring:bind>
怎么老是忘了呢?!!

10.Command(就是与页面绑定的类,strtus里叫Form) 里面 字段必须小写字母打头,否则抛出:org.springframework.beans.NotReadablePropertyException: Invalid property 'EndIP' of bean class [net.kofsky.nmis.command.NetBarCommand]: Bean property 'EndIP' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?

 11、log4j的配置

  在非web应用环境下,只需要把log4j的包放到classpath下,然后在程序中加入private Logger log = Logger.getLogger(XXXClass.class);,然后就可以直接用log进行日志记录了~~

用Spring进行web开发,还需要在web.xml中配置
   <context-param>    
      <param-name>webAppRootKey</param-name>     
     <param-value>NMisSystem.root</param-value>
   </context-param>
 
    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>/WEB-INF/classes/log4j.properties</param-value>
    </context-param>
 
    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>

log4j比较详细的介绍可以看:http://goodluckyemin.bokee.com/2669924.html

12、在Eclipse可以运行,但在tomcat中发布项目时出现错误:org.apache.commons.logging.LogConfigurationException: org.apache.commons.logging.LogConfigurationException: No suitable Log constructor [Ljava.lang.Class;@1589d3d for org.apache.commons.logging.impl.Log4JLogger (Caused by java.lang.NoClassDefFoundError: org/apache/log4j/Category) (Caused by org.apache.commons.logging.LogConfigurationException: No suitable Log constructor [Ljava.lang.Class;@1589d3d for org.apache.commons.logging.impl.Log4JLogger (Caused by java.lang.NoClassDefFoundError: org/apache/log4j/Category))
俺的log4j包一直都放在lib下面,怎么可能找不到呢?很奇怪~~后来上网查了一下,发现包放重复了有可能出现这种错误~~一直找,在jre/lib/ext下面很多包,很多都和WEB-INF/lib下的包重复了,汗,除dnsns.jar四个原有的包外,其他全部删除,重启tomcat,ok

13、tomcat中发布项目:
a.Eclipse中导出项目为.war(或者ant打包)
b.将war文件拷贝到%TOMCAT_HOME%/webapps/下
(直接放到webapp下似乎不需要设置虚拟目录)
c.启动tomcat。。。。

 
分享到:
评论

相关推荐

    图书管理系统spring+struts+hibernate

    《图书管理系统spring+struts+hibernate》是一款基于Java技术栈开发的图书管理软件,其核心框架包括Spring、Struts和Hibernate。该系统利用MySQL作为数据库存储数据,提供了完整的数据库备份,确保了数据的安全性与...

    struts+spring+hibernate实现图书修改和删除

    Hibernate是一个对象关系映射(ORM)框架,它简化了数据库操作,将Java对象和数据库记录进行映射,使得开发者可以使用面向对象的方式来操作数据库。在本项目中,Hibernate被用来执行图书数据的CRUD(创建、读取、...

    struts+spring+hibernate(mysql)用户登录及文件上传

    接着,Hibernate作为ORM(对象关系映射)工具,负责将Java对象与数据库中的记录进行映射。在用户登录时,它可能被用来查询用户信息;而在文件上传功能中,Hibernate可能用于持久化上传文件的相关元数据。通过...

    Flex+spring+hibernate示例

    Flex+Spring+Hibernate示例是一种常见的企业级应用架构,它结合了Adobe Flex前端技术、Spring后端框架和Hibernate持久层框架,以构建高效、灵活且易于维护的Web应用程序。在这个示例中,开发者可能已经展示了如何...

    纯净的spring+hibernate+mysql

    【纯净的Spring+Hibernate+MySQL】项目是一个典型的Java Web应用示例,它将Spring MVC、Hibernate ORM框架与MySQL数据库相结合,以实现用户登录、注册等基础功能。在本项目中,Spring MVC作为控制层,负责处理HTTP...

    spring+hibernate整合实现简单数据库添加记录

    本文将深入探讨如何将Spring与Hibernate整合,以实现对数据库的简单添加记录功能,这对于初学者来说是一次宝贵的学习机会。 首先,我们需要理解Spring的核心概念。Spring提供了一个依赖注入(DI)容器,它负责管理...

    jsf+spring+hibernate

    Hibernate 是一个对象关系映射(ORM)框架,它允许开发者使用 Java 对象来操作数据库记录,简化了数据库操作。在项目中,Hibernate 负责数据持久化,包括数据库连接、CRUD(创建、读取、更新、删除)操作。为了使用...

    Struts2+Spring+Hibernate和Struts2+Spring+Ibatis

    Struts2+Spring+Hibernate和Struts2+Spring+Ibatis是两种常见的Java Web应用程序集成框架,它们分别基于ORM框架Hibernate和轻量级数据访问框架Ibatis。这两种框架结合Spring,旨在提供一个强大的、可扩展的、易于...

    Spring+Spring mvc+Hibernate+Bootstrap、企业级员工信息管理系统

    01. 采用后台及前台的 Spring + Spring mvc + Hibernate + Bootstrap 02. 后台全注解式的开发(除了必要的spring和hibernate的xml配置以外) 03. 后台通过自定义注解结合一个访问拦截器实现整个系统的权限控制 04...

    Spring+Hibernate+Struts资源共享系统

    在“Spring+Hibernate+Struts”系统中,Hibernate 负责处理数据库操作,将Java对象映射到数据库表,从而避免了繁琐的SQL代码编写。通过 Hibernate,开发者可以轻松地进行数据的增删改查操作,同时支持事务管理和缓存...

    超市管理信息系统(SSH struts+spring+hibernate)

    【标题】"超市管理信息系统(SSH struts+spring+hibernate)"是一个综合性的IT项目,它基于流行的Java企业级开发框架SSH(Struts、Spring、Hibernate)来构建。SSH框架是许多大型企业级应用的首选,因为它提供了一个...

    SpringMVC+Spring+Hibernate+Oracle 实现图书管理(CRUD)

    同时,Spring的AOP特性可用于实现如日志记录、权限控制等跨切面关注点。 3. **Hibernate**:Hibernate是一个强大的ORM(对象关系映射)框架,用于简化Java应用与数据库之间的交互。在本项目中,Hibernate通过XML或...

    Webwork+spring+hibernate集成实例

    Hibernate作为ORM框架,主要解决Java与数据库之间的交互问题。它允许开发者通过对象的方式来操作数据库,减少了SQL的编写工作量。Hibernate支持实体类与数据库表的映射,提供了CRUD(创建、读取、更新、删除)操作...

    SSH(Struts+Spring+Hibernate)结合项目简单实例

    SSH(Struts+Spring+Hibernate)是Java Web开发中一种常见的技术栈,它将MVC设计模式、依赖注入和持久层框架集成为一个整体,大大提高了开发效率和代码的可维护性。下面我们将深入探讨SSH框架的各个组成部分及其结合...

    struts+spring+hibernate人力资源管理系统

    再者,Hibernate作为对象关系映射(Object-Relational Mapping,ORM)工具,解决了Java应用与数据库之间的数据操作问题。它将Java对象和数据库表进行映射,使得开发者可以以面向对象的方式来操作数据库,降低了对SQL...

    struts2+spring+hibernate+jquery+json

    Hibernate 是一个对象关系映射(ORM)框架,用于将Java对象映射到数据库中的记录。它极大地减少了手动编写SQL的需要,提高了开发效率。Hibernate 支持多种数据库,提供了一套完善的API用于数据操作和查询,包括HQL...

    struts+spring+hibernate开发 注册小实例

    **Hibernate框架**:Hibernate是一个对象关系映射(ORM)框架,它允许开发者用Java对象来操作数据库记录。在注册实例中,Hibernate将用于处理用户数据的持久化,如将新注册用户的账户信息存储到数据库中。通过...

    Spring+Hibernate+MySql的应用实例

    通过SessionFactory和Session接口,Hibernate可以进行对象持久化,将Java对象转换为数据库中的记录。 **MySQL数据库**:MySQL以其高效、稳定和易用性,成为许多Web应用的首选数据库。在本实例中,开发者需要创建...

    webwork+spring+hibernate 开发资料

    Spring可以通过其Action代理来管理和控制WebWork的动作,同时Spring的AOP特性可以用于处理如日志记录、事务管理等跨切面关注点。 Spring与Hibernate的整合则主要体现在数据访问层。Spring提供了HibernateTemplate或...

Global site tag (gtag.js) - Google Analytics