EasyDBO的实体配置,如果实体存在双向关联,并且lazy都设定为false的时候,就会产生堆栈溢出异常。
为什么会导致堆栈溢出呢?
比如存在A实体和B实体。
A实体与B实体存在一对一的双向关联,按上面所说的实体关联配置,A实体就会自动关联B(从数据库里根据已设定的外键查询B对象,把查询结果保存在关联中,即类型为B的字段),同样,当A将B对象保存为自己的关联时,B对象也自动去寻找自己的关联,上面说了,A与B是双向关联,并且lazy=false,所以B也根据自己的外键来查询A,将查询结果A对象保存为自己的关联,然后A又查询自己的关联...一直循环下去,最终,发生了堆栈溢出。
是否需要在查询一次关联后将关联的lazy重设为true呢?我试了一下,在实体在第一次寻找完自己的关联后将关联的属性设为true,就可以避免了堆栈溢出。
在EasyDBO上做的代码修改是:
在EasyJDB的private void dbo2obj(DBObject dbo, Object obj)方法中,
感觉上,根据文档说明,lazy设定为true,但是没有起到什么作用哦。很奇怪。
我在上面的
field.setLazy(true);这里添加了一句
前面又添加了一句:
if(field.isLazy()){ continue; }感觉上不是很合理,不管了,先用着,查正原因再做修正。