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; }感覺上不是很合理,不管了,先用著,查正原因再做修正。