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

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

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


    隨筆-35  評論-97  文章-0  trackbacks-0

    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)方法中,

     

        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設定為true。否則會出現堆棧溢出錯誤!//這里添加了一句
                            if(field.getClass() == OneToOneField.class && !field.isLazy())
                            
    {
                                
    // 過濾掉OneToOne中的null屬性
                                wrapper.setPropertyValue(popertyName, ((ClassField)field).loadValue(dbo, this));
                            }

        

     

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

    我在上面的

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

    前面又添加了一句:

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

    posted on 2007-07-02 14:02 三告習習 閱讀(1032) 評論(0)  編輯  收藏 所屬分類: easyJF-projects
    主站蜘蛛池模板: 国产精品成人啪精品视频免费| 在线永久免费的视频草莓| 野花香高清在线观看视频播放免费 | 国产一区二区视频免费| 亚洲日本一区二区三区在线| 亚洲一区二区三区成人网站| 国产男女爽爽爽免费视频 | 四虎永久在线精品免费网址 | 亚洲AV无码XXX麻豆艾秋| av永久免费网站在线观看| 日韩亚洲国产综合久久久| 久久久久亚洲国产| 成人免费毛片内射美女-百度| 内射干少妇亚洲69XXX| 国产亚洲精品免费视频播放| 国产偷v国产偷v亚洲高清| 在线观看人成视频免费无遮挡| 伊人久久精品亚洲午夜| 国产在线精品免费aaa片| 亚洲av日韩av激情亚洲| 成年女人色毛片免费看| 亚洲精品乱码久久久久久V| 亚洲成年人啊啊aa在线观看| 国产精品成人69XXX免费视频| 亚洲av日韩av无码| 大学生美女毛片免费视频| 一区二区三区免费高清视频| 久久精品国产亚洲沈樵| 亚洲国产成人手机在线观看| 天堂在线免费观看中文版| 亚洲熟妇av一区| 美女视频黄a视频全免费| 亚洲av无码电影网| 天堂在线免费观看中文版| 亚洲日韩精品无码专区| 日本免费电影一区| 美女视频黄a视频全免费网站一区 美女视频黄a视频全免费网站色 | 在线精品免费视频| 理论亚洲区美一区二区三区| 免费人成视网站在线观看不卡| 亚洲AV综合色区无码一二三区|