<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>


    隨筆-35  評(píng)論-97  文章-0  trackbacks-0

    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ù)庫里根據(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)方法中,

     

        private void dbo2obj(DBObject dbo, Object obj)
        
    {
            
    if(dbo != null)
            
    {
                Map map 
    = dbo.getValue();
                DBTable table 
    = findTable(obj.getClass());
                
    if(table == null)
                
    {
                    table 
    = dbo.getTable();
                }

                
    // this.setAutoCommit(false);
                BeanWrapper wrapper = new BeanWrapper(obj);
                java.util.Iterator it 
    = table.getAllFields().entrySet().iterator();
                
    while(it.hasNext())
                
    {
                    Map.Entry en 
    = (Map.Entry)it.next();
                    DBField field 
    = (DBField)en.getValue();
                    String popertyName 
    = (String)en.getKey();

                    
    try
                    
    {
                        
    if(ClassField.class.isAssignableFrom(field.getClass()))
                        
    {
                            
    if(logger.isDebugEnabled())
                                logger.debug(field.getClass());

                            field.setLazy(
    true);//加載一次后,將lazy設(shè)定為true。否則會(huì)出現(xiàn)堆棧溢出錯(cuò)誤!//這里添加了一句
                            if(field.getClass() == OneToOneField.class && !field.isLazy())
                            
    {
                                
    // 過濾掉OneToOne中的null屬性
                                wrapper.setPropertyValue(popertyName, ((ClassField)field).loadValue(dbo, this));
                            }

        

     

    感覺上,根據(jù)文檔說明,lazy設(shè)定為true,但是沒有起到什么作用哦。很奇怪。

    我在上面的

    field.setLazy(true);這里添加了一句

    前面又添加了一句:

    if(field.isLazy()){
           continue;
          }
    感覺上不是很合理,不管了,先用著,查正原因再做修正。

    posted on 2007-07-02 14:02 三告習(xí)習(xí) 閱讀(1044) 評(píng)論(0)  編輯  收藏 所屬分類: easyJF-projects
    主站蜘蛛池模板: 亚洲一区二区三区久久久久| 成年网在线观看免费观看网址| 日本xxwwxxww在线视频免费| 91av免费在线视频| 亚洲首页在线观看| 国产成人免费a在线资源| 3344在线看片免费| 亚洲欧美日韩中文二区| 国产亚洲成av片在线观看| 小草在线看片免费人成视久网| 亚洲综合激情五月丁香六月| 亚洲一区爱区精品无码| 免费大片黄在线观看yw| 黄色网页在线免费观看| 亚洲国产午夜精品理论片| 亚洲无线一二三四区手机| 日本三级2019在线观看免费| 中文字幕a∨在线乱码免费看| 亚洲国产激情在线一区| 亚洲AV综合色区无码一区| 国产真实伦在线视频免费观看| 久久国产精品免费看| 美女18一级毛片免费看| 亚洲国产模特在线播放| 亚洲精品无码专区久久久| 日韩高清在线高清免费| 8x网站免费入口在线观看| 一级特黄aaa大片免费看| 亚洲中文字幕AV在天堂| 久久久久亚洲AV片无码| 亚洲电影日韩精品| 永久黄网站色视频免费观看| 18禁止看的免费污网站| 国产免费无码一区二区| 色老头综合免费视频| 亚洲中文字幕无码久久2020| 久久亚洲国产成人精品性色| 中国亚洲女人69内射少妇| 国产一级大片免费看| 四虎在线视频免费观看| 久热中文字幕在线精品免费|