一个Hibernate异常:
在 我的SalesDAOImpl中的
public PaginationSupport getSalesPage(int pageSize, int startIndex,Integer orgId) throws DataAccessException 方法中遇到了下面的异常报错!
[WARN ] 2010-11-18 11:34:16,359 - org.hibernate.util.JDBCExceptionReporter - SQL Error: 0, SQLState: 24000
[ERROR] 2010-11-18 11:34:16,359 - org.hibernate.util.JDBCExceptionReporter - ResultSet may only be accessed in a forward direction.
org.hibernate.exception.GenericJDBCException: could not execute query
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
在网上搜索一番,发现我穿的参数(startIndex)值的问题。
q.setFirstResult(startIndex);
在sqlserver中,这个(startIndex)不能为负数。如果为负数回报上面的异常错误。
在update操作的时候遇到了这样的错误
org.hibernate.TransientObjectException: The given object has a null identifier: com.dbwen.handsale.pojo.Sales
意思 是说update的 实体对象的的主键值 NULL 没有 报错
后来检查的时候 是发现了 id值 为NULL ,赋值修改后,一切ok!
所以我个人感觉如果update有问题,看看你 update的对象的主键的值是否存在!
一个Dwr异常:
[WARN ] 2010-11-19 11:25:51,390 - org.directwebremoting.dwrp.BaseCallMarshaller - Marshalling exception
org.directwebremoting.extend.MarshallException: Error marshalling com.dbwen.handsale.dto.VisitPlanDto: null. See the logs for more details.
at org.directwebremoting.impl.PropertyDescriptorProperty.setValue(PropertyDescriptorProperty.java:89)
at org.directwebremoting.convert.BasicObjectConverter.convertInbound(BasicObjectConverter.java:140)
注意上面 这样的一句:org.directwebremoting.extend.MarshallException: Error marshalling com.dbwen.handsale.dto.VisitPlanDto: null
怎么可能出现这样的问题了
var planId=null;
var o ={ planId: planId,
empNo: $('#empNo').val(),
planName: $('#planName').val(),
pathId:$('#pathId').val(),
visitAmount: $('#visitAmount').val(),
planDate: toDate($('#planDate').val()),
memo: $('#memo').val()};
if(action == 'add' && confirm('确认添加拜访计划?')){
$("#loading").show();
var rtn=dbwtool.callDWRBusiness('VisitPlanDWR.addVisitPlan',[o]);。。。。
我在ff浏览器中 断点调试了 此时的o变量中的值 都有 并且我在VisitPlanDwr.java中的addVisitPlan(VisitPlanDto dto)打了断点 ,可是程序根本没有跑到这里。
然后我看看我的dwr.xml(Spring整合Dwr)文件-》关于spring整合Dwr 这里不作详细说明 这里有一篇Blog很详细: http://eyeone.javaeye.com/blog/46624
<create creator="spring" javascript="VisitPlanDWR" scope="application">
<param name="beanName" value="visitPlanDWR"/>
</create>
<convert converter="bean" match="com.dbwen.handsale.dto.*"/>
<convert converter="bean" match="com.dbwen.handsale.pojo.*"/>
和jsp文件
<script type="text/javascript" src="<%=ctxPath%>/js/visit/visitPlan.js"></script>
<script type='text/javascript' src="<%=ctxPath%>/dwr/interface/VisitPlanDWR.js"></script>
<script type='text/javascript' src="<%=ctxPath%>/dwr/engine.js"></script>
和Spring 中对应的beanId
<bean id="visitPlanDWR" class="com.dbwen.handsale.web.dwr.visit.VisitPlanDWR">
<property name="visitPlanService" ref="visitPlanService"/>
</bean>
一切没有问题。后来想了想 有可能出现在hibernate的映射文件的问题
<id name="planId" type="int">
<column name="plan_id" />
<generator class="identity" />
</id>
并且VisitPlan.java文件中的 private int planId;
在添加的时候,一般的主键的值是没有的 他是自动标识的。我在 visitPlan.js中 初始化了 plan_id=null ,可能是dwr对于此int null转化不了。
int 只是一个数据类型 不是一个对象 。
后来我尝试把 映射文件和.java文件对应的字段改为了 int-》integer
就没有出现此问题,看来是数据类型不匹配。
还有一种方法(不修改planId的 类型还是 int ),有点繁琐:
if(action='add'){
var o ={ //planId: planId,在添加的时候 不赋值给planId 这样在Dwr与javaBean转化的时候 会在执行添加的时候 自动标识的。
empNo: $('#empNo').val(),
planName: $('#planName').val(),
pathId:$('#pathId').val(),
visitAmount: $('#visitAmount').val(),
planDate: toDate($('#planDate').val()),
memo: $('#memo').val()};
}
if(action='edit'){
var o ={ planId: planId,//这时候在运用这一句,但是此时的planId有值从一个方法中获取的,在赋值就不会报错
empNo: $('#empNo').val(),
planName: $('#planName').val(),
pathId:$('#pathId').val(),
visitAmount: $('#visitAmount').val(),
planDate: toDate($('#planDate').val()),
memo: $('#memo').val()};
}
但由此可见,添加了代码,有点冗长。个人感觉还是int-》integer好点!
一个小细节:
一般我们在获取数据库的List对象的时候,用for循环去做例如:
list =q.list();
for(int i=0;i<list.size();i++){
Object[] objs= (Object[] )list.get(i);
VisitPlanDto dto = new VisitPlanDto();
PropertyUtils.copyProperties(dto,objs[0]);
dto.setPathName((String)objs[1]);
dto.setPlaceCollection((String)objs[2]);
dto.setLatLanCollection((String)objs[3]);
result.add(dto);
}
但是objs[i].toString 在处理null的过程中 会发生转化错误
而(String)objs[2] 则不会出现
所以在从数据中获取的数据需要相应的转化的时候 直接在objs[i]前面加一个 要转化的类型。
分享到:
相关推荐
异常处理是Java编程中至关重要的一个概念,它确保了程序在遇到错误或异常情况时能够以优雅的方式继续执行或者终止。下面是对Java异常处理机制的详细解析。 在Java中,异常是程序运行时发生的错误,它中断了正常的...
### Java异常处理总结 #### 一、Java异常的基础知识 在Java编程中,异常处理是一项极其重要的技术。异常处理能够帮助开发者优雅地处理程序运行时遇到的问题,避免程序崩溃,并提供给用户友好的反馈信息。 **什么...
Java异常处理是编程中至关重要的一个环节,它确保了程序在遇到错误时能够优雅地运行,而不是突然崩溃。本实验报告“java实验报告4-异常处理”旨在帮助初学者掌握Java中的异常处理机制,以及如何利用log4j进行日志...
以下是对Java异常处理的一些误区和经验总结。 **误区一:过度使用try-catch块** 有些开发者习惯于在每个函数的开始部分都套用try-catch块,以为这样可以捕捉所有可能出现的异常。实际上,这种做法使得代码变得混乱...
在Windows操作系统中,异常处理是一项关键的...总结,Windows下的异常处理是一个复杂而重要的主题,涉及到硬件、软件、编程语言和多线程等多个层面。理解和熟练掌握异常处理机制,对于编写可靠、稳定的软件至关重要。
Java异常处理是编程中至关重要的一个环节,它确保了程序的稳定性和健壮性。异常是在程序执行过程中遇到的非正常情况,如果不妥善处理,可能导致Java虚拟机(JVM)的异常停止。Java通过异常类来表示不同类型的异常,...
### Spring Cloud Gateway全局异常处理详解 #### 一、引言 在微服务架构中,网关作为服务入口,承担着路由转发、限流熔断、鉴权认证等职责。Spring Cloud Gateway作为一款基于Spring Framework 5、Project Reactor...
通过异常处理,我们可以将正常业务代码和异常处理代码分开,使程序的逻辑更清晰,增强程序的健壮性。 异常机制主要包含以下几个部分: 1. 异常概述:异常是程序在执行过程中发生的不正常情况,比如文件找不到、...
这样,当`RestTemplate`遇到错误响应时,会调用我们自定义的异常处理方法,而不是直接抛出默认异常。 例如,我们可以创建一个名为`MyRestErrorHandler`的类: ```java public class MyRestErrorHandler implements...
首先,我们要明确异常处理的基本流程:当程序执行过程中遇到错误,会抛出一个异常对象,这个对象包含了错误信息。然后,程序会检测到这个异常并决定如何响应。最后,根据处理策略,程序可能会尝试恢复执行或者直接...
当一个线程遇到异常时,Windows操作系统会调用预先注册的异常处理程序(称为异常处理链),这是一个由多个异常处理回调函数组成的序列。这些回调函数的原型为 `EXCEPTION_DISPOSITION __cdecl _except_handler`,...
通过异常处理,程序可以在遇到问题时中断当前流程,执行预定义的恢复操作,或者至少提供有用的错误信息,而不是简单地崩溃。在Java中,异常是通过`try-catch`块来捕获和处理的。 **异常的分类与处理** 在Java中,...
在易语言中,异常处理是程序健壮性的重要组成部分,它允许程序在遇到错误或异常情况时,能够有条不紊地进行处理,而不是突然崩溃。本文将详细介绍易语言中的TRY异常处理机制,以及如何使用"try_进入区域"、"try_退出...
在Windows中,当一个线程遇到错误时,系统会触发异常处理流程。该流程允许用户自定义的回调函数被执行,从而有机会处理异常或采取其他补救措施。 ##### 异常记录结构 在SEH中,最重要的数据结构是`EXCEPTION_...
### Java程序中的异常处理 #### 异常处理概念与机制 在Java编程中,异常处理是一种用于处理程序运行过程中可能出现的错误或意外情况的重要机制。它可以帮助开发者更好地控制程序流,确保程序即使在遇到错误的情况...
### C#异常处理详解 #### 一、异常处理机制概述 异常处理是现代编程语言中一个重要的组成部分,它能够帮助开发者有效地处理程序运行时出现的各种意外情况,避免程序崩溃,提高程序的健壮性和用户体验。在C#中,...
异常处理是通过异常情况(EXCEPTION)和异常处理器(EXCEPTION HANDLER)来实现的,这些机制使得程序在遇到错误时能够继续执行或者至少记录并报告错误,而不是简单地崩溃。 异常分为预定义、非预定义和用户定义三种...