EasyDBO的實(shí)體配置,如果實(shí)體存在雙向關(guān)聯(lián),并且lazy都設(shè)定為false的時(shí)候,就會(huì)產(chǎn)生堆棧溢出異常。
為什么會(huì)導(dǎo)致堆棧溢出呢?
比如存在A實(shí)體和B實(shí)體。
A實(shí)體與B實(shí)體存在一對(duì)一的雙向關(guān)聯(lián),按上面所說的實(shí)體關(guān)聯(lián)配置,A實(shí)體就會(huì)自動(dòng)關(guān)聯(lián)B(從數(shù)據(jù)庫(kù)里根據(jù)已設(shè)定的外鍵查詢B對(duì)象,把查詢結(jié)果保存在關(guān)聯(lián)中,即類型為B的字段),同樣,當(dāng)A將B對(duì)象保存為自己的關(guān)聯(lián)時(shí),B對(duì)象也自動(dòng)去尋找自己的關(guān)聯(lián),上面說了,A與B是雙向關(guān)聯(lián),并且lazy=false,所以B也根據(jù)自己的外鍵來查詢A,將查詢結(jié)果A對(duì)象保存為自己的關(guān)聯(lián),然后A又查詢自己的關(guān)聯(lián)...一直循環(huán)下去,最終,發(fā)生了堆棧溢出。
是否需要在查詢一次關(guān)聯(lián)后將關(guān)聯(lián)的lazy重設(shè)為true呢?我試了一下,在實(shí)體在第一次尋找完自己的關(guān)聯(lián)后將關(guān)聯(lián)的屬性設(shè)為true,就可以避免了堆棧溢出。
在EasyDBO上做的代碼修改是:
在EasyJDB的private void dbo2obj(DBObject dbo, Object obj)方法中,















































感覺上,根據(jù)文檔說明,lazy設(shè)定為true,但是沒有起到什么作用哦。很奇怪。
我在上面的
field.setLazy(true);這里添加了一句
前面又添加了一句:
if(field.isLazy()){
continue;
}
感覺上不是很合理,不管了,先用著,查正原因再做修正。