论坛首页 Java企业应用论坛

iBATIS超疑难问题,很诡异

浏览 9083 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2014-05-13  
莫名其妙出现异常,至今没有重现。
1、 异常:信息
[任务类型:55]org.mybatis.spring.mybatesSystemExceeption:nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: java.lang.nullPointerExcetion:
###Cause:java.lang.NullPointerExcetion,NeedProcessImmediately! 
TaskGenDataFile4Sage.java(exec:68)

2、 情况描述
每天会执行四到8次类似代码块,每次都会使用
:dataSndDefTblDao.findDataSndDefTblByCondition
当天四个线程,每个线程单独执行,其它三个成功,一个失败,后重新启动执行成功;
每次调用,只有传入的常量值(均非空)不一样,查询数据库是同一张配置表,表中数据近三十天未变化。
3、 错误出处代码:
DataSndDefTbl exportTable=new DataSndDefTbl();
if(CommonInfo.isInitData){// 这是人工干预操作,表示需要全量供数
	exportTable.setDataFilePcsgTpcd(IParaDef.EXPORT_MODE_ALL);//传入常量参数01
}else{
	exportTable.setDataFilePcsgTpcd(IParaDef.EXPORT_MODE_ADD);//传入常量参数ADD
}
exportTable.setRvlPsnTpcd(IParaDef.SYSTEM_TYPE_SAFETY);
List<DataSndDefTbl> exportFiles=dataSndDefTblDao.findDataSndDefTblByCondition(exportTable);
for(DataSndDefTbl exportFile:exportFiles)
{
if(!procTableData4Safety(trDate,exportFile,localFilePath,dataBeginTime,dataEndTime,conn))
{
		return false;
	}
}
return true;

4、 Dao层代码  DataSndDefTblMapper.java
public interface DataSndDefTblMapper{
	//按条件查询 手工
	public List<DataSndDefTbl> findDataSndDefTblByCondition(DataSndDefTbl dataSndDefTbl);
}

5、 持久化语句
mapper namespace="com.xxx.jg.app.batchproc.persistence.DataSndDefTblMapper">
<!-- 按条件查询 手工-->
<selectid="findDataSndDefTblByCondition" parameterType="com.xxx.jg.app.batchproc.domain.DataSndDefTbl" resultType="com.xxx.jg.app.batchproc.domain.DataSndDefTbl">
select INST_EMPE_DTTBL_NM as instEmpeDttblNm,DATA_FILE_PCSG_TPCD as dataFilePcsgTpcd,DATA_FILE_SND_CYC as dataFileSndCyc,RVL_PSN_TPCD as rvlPsnTpcd,INST_EMPE_DTTBL_DSC as instEmpeDttblDsc,INSEMPDTFLNM as insempdtflnm,DTFLSTRRTDSC as dtflstrrtdsc,DATA_SND_INCMTL_CND as dataSndIncmtlCnd,DATA_SND_ATTR_DSC as dataSndAttrDsc,INST_EMPE_HIST_DTTBL_NM as instEmpeHistDttblNm,BTCHPCS_PRTY_DSC as btchpcsPrtyDsc from DATA_SND_DEF_TBL 
<where>        
   			<if test="instEmpeDttblNm != null"> and trim(INST_EMPE_DTTBL_NM) = #{instEmpeDttblNm}</if>
   			<if test="dataFilePcsgTpcd != null"> and trim(DATA_FILE_PCSG_TPCD) = #{dataFilePcsgTpcd}</if>
   			<if test="dataFileSndCyc != null"> and trim(DATA_FILE_SND_CYC) = #{dataFileSndCyc}</if>
   			<if test="rvlPsnTpcd != null"> and trim(RVL_PSN_TPCD) = #{rvlPsnTpcd}</if>
</where>order by BTCHPCS_PRTY_DSC
</select> 
</mapper>


6、 DataSndDefTbl对象属性
public class DataSndDefTbl{
	// Fields
	private String instEmpeDttblNm; 
	private String dataFilePcsgTpcd;
	private String dataFileSndCyc; 
	private String rvlPsnTpcd; 
	private String instEmpeDttblDsc; 
	private String insempdtflnm; 
	private String dtflstrrtdsc;
	private String dataSndIncmtlCnd; 
	private String dataSndAttrDsc; 
	private String instEmpeHistDttblNm; 
	private String btchpcsPrtyDsc;
…… 

7、 检核情况
6.1 传入常量为空   不会报错
6.2 exportFiles 为空,不会调用数据库查询
6.3 传入常量加了换行符,不会报错
6.4 传入dao为NULL,会报空指针,但不是ibatis持久化异常空指针,错误信息不一样
6.5 将数据库表记录清除,不会报错
6.6 将数据库记录中关键字段数据清空,不会报错
6.7 将数据库表删除,会报错,但错误信息也不一样。如果是数据库错误,日志会捕捉信息,但是这里没有捕获,说明非数据库错误,比如数据库不存在:
org.springframework.jdbc.BadSqlGrammarException:
### Error querying database.  Cause: java.sql.SQLException: ORA-00942: table or view does not exist

### The error may exist in com/xxx/jg/app/batchproc/persistence/DataSndDefTblMapper.xml
### The error may involve com.xxx.jg.app.batchproc.persistence.DataSndDefTblMapper.findDataSndDefTblByCondition-Inline
### The error occurred while setting parameters
### SQL: select INST_EMPE_DTTBL_NM as instEmpeDttblNm,DATA_FILE_PCSG_TPCD as dataF ilePcsgTpcd,DATA_FILE_SND_CYC as dataFileSndCyc,RVL_PSN_TPCD as rvlPsnTpcd,INST_EMPE_DTTBL_DSC as instEmpeDttblDsc,INSEMPDTFLNM as insempdtflnm,DTFLSTRRTDSC as dtflstrrtdsc,DATA_SND_INCMTL_CND as dataSndIncmtlCnd,DATA_SND_ATTR_DSC as dataSndAttrDsc,INST_EMPE_HIST_DTTBL_NM as instEmpeHistDttblNm,BTCHPCS_PRTY_DSC as btchpcsPrtyDsc from DATA_SND_DEF_TBL           WHERE  trim(DATA_FILE_SND_CYC) = ?        and trim(RVL_PSN_TPCD) = ?    order by BTCHPCS_PRTY_DSC
### Cause: java.sql.SQLException: ORA-00942: table or view does not exist; bad SQL grammar []; nested exception is java.sql.SQLExceptio n: ORA-00942: table or view does not exist,NeedProcessImmediately !
   发表时间:2014-05-14  
能否把error的日志信息在多弄一些
0 请登录后投票
   发表时间:2014-05-15  
检查实体中的属性是不是基础类型比如Integer,而传入参数的时候,,是不是基本数据类型int..强制转换报错。
比如:class{Integer a; Integer getA(){return a;}  method(int a){}} 调用 method(class.getA());时
0 请登录后投票
   发表时间:2014-05-19  
配置log日志打印jdbc sql语句,看真实发给数据库的sql及参数是什么样的,对比查找传参方面有什么问题。
0 请登录后投票
   发表时间:2014-05-19  
记得我在csdn上回复过次问题,一个是xml文件需要resultType改成resultMap
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics