自己orm框架的一个旷世大BUG!自己都恶心死了。

时间:2021-07-12 17:50:33

错误的现象是空指针,在orm的list删除一个对象的时候发生的。

 

首先把所有项目都源代码都放在一起看,最后找到空指针的问题:

ormobject.removefromlist。产生了一个插数据库操作,但是这个操作的对象的uniquekey没有赋值,导致数据库错误,这个错误被log记录,但是log。。 (log里面由于select的时候没有把对方添加到内存,) 记录error 的时候,log开启了ip,导致空指针。

 

解决是解决了,可是为什么会出现插入数据库的操作?

removefromlist, 在aop里面会调用
proxyList = ObjConvertor.Instance.ObjListToProxyList(value as IList);
把输入参数转化为proxy

如果buffer没有对应的对象 如果对象的proxy不存在,那么这个方法会自动创建一个proxy,这个时候就导致了插入数据库操作(sqlserver又会认为空的uk为重复,导致了log的出错)

 

找到问题了,那么问题就是,为什么对象的proxy不存在

select的bug,如果出现2个数据,select返回是null!!!

 

由于ormobj的list里面保存了2个对象的upk都是相同的,导致select的时候,返回2个结果,但是程序自动判断,返回null。导致了这个复杂的bug!!!!

 

又由于返回了null,proxy=null,但是aop没有判断空指针返回,因此再次传递给了proxytoobject,这个时候,object就有了空的proxy,导致了出错!

 

靠!!!!!!!!!!恶心到自己都想吐。。。这么垃圾的代码怎么可能是我写的。嗨。。。

 

现在还有另外一个大bug,在withdraw数据的时候,服务器报500错误,查看日志依然是违反了Unique约束,估计仍然是个bug