<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發(fā)現(xiàn)一些問題。

    首先,DBTable中的id命名意義不明朗,這個id你猜是數(shù)據(jù)庫表的key還是javaBean對應(yīng)于數(shù)據(jù)庫表key的屬性?我的猜測是前者,數(shù)據(jù)庫表的key(主鍵的名稱)。

    但是這樣就有問題了,如果你的數(shù)據(jù)庫表字段與javaBean一一對應(yīng)的屬性命名一致的話,倒沒有什么問題,不一致的話,出現(xiàn)什么問題呢,看看下面的代碼:

            //使用annotation注釋方式來進(jìn)行實現(xiàn)數(shù)據(jù)庫表與javaBean的對應(yīng)
            EasyJDB db=EasyJDB.getInstance();    
            
    //數(shù)據(jù)庫表為“AFTER_ALARM_FILE_RESULT”
            AfterAlarmFileResult a = new AfterAlarmFileResult();
            
    //fileId是我數(shù)據(jù)庫表主鍵“FILE_ID”對應(yīng)的javaBean屬性
            a.setFileId(222);
            db.del(a);
            db.close();

    執(zhí)行后,拋出異常:

    0    [main] ERROR com.easyjf.dbo.EasyJDB  - 主鍵產(chǎn)生錯誤!com.easyjf.beans.exception.NotReadablePropertyException: Invalid property 'FILE_ID' of bean class [com.surfilter.gacomm.center.entity.AfterAlarmFileResult]: Bean property 'FILE_ID' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?
    com.easyjf.beans.exception.NotReadablePropertyException: Invalid property 
    'FILE_ID' of bean class [com.surfilter.gacomm.center.entity.AfterAlarmFileResult]: Bean property 'FILE_ID' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?
     at com.easyjf.beans.BeanWrapper.getPropertyValue(BeanWrapper.java:
    470)
     at com.easyjf.beans.BeanWrapper.getPropertyValue(BeanWrapper.java:
    462)
     at com.easyjf.dbo.EasyJDB.generatorID(EasyJDB.java:
    538)
     at com.easyjf.dbo.EasyJDB.obj2dboMap(EasyJDB.java:
    604)
     at com.easyjf.dbo.EasyJDB.obj2dbo(EasyJDB.java:
    588)
     at com.easyjf.dbo.EasyJDB.del(EasyJDB.java:
    399)
     at test.EntityInheritAnotationTest.deleteAData(EntityInheritAnotationTest.java:
    52)
     at test.EntityInheritAnotationTest.main(EntityInheritAnotationTest.java:
    33)

    暈~~~~~~~主鍵產(chǎn)生錯誤!!但是奇怪的是,你期待的結(jié)果(刪除一個對象,即數(shù)據(jù)庫表的一條記錄)卻依然成功!記錄被刪除了!!

    “主鍵產(chǎn)生錯誤”究竟是怎么產(chǎn)生的呢?

    看看錯誤的信息就可以跟蹤,發(fā)現(xiàn)是原因是這樣的:

    at com.easyjf.beans.BeanWrapper.getPropertyValue(BeanWrapper.java:462)   --標(biāo)號5
     at com.easyjf.dbo.EasyJDB.generatorID(EasyJDB.java:538)  --標(biāo)號4
     at com.easyjf.dbo.EasyJDB.obj2dboMap(EasyJDB.java:604)  --標(biāo)號3
     at com.easyjf.dbo.EasyJDB.obj2dbo(EasyJDB.java:588) --標(biāo)號2
     at com.easyjf.dbo.EasyJDB.del(EasyJDB.java:399) -- 標(biāo)號1

    留意我上面的“標(biāo)號n”,那時堆棧執(zhí)行的過程。

    標(biāo)號1   --> 執(zhí)行刪除對象

    標(biāo)號2   --> 執(zhí)行將對象轉(zhuǎn)換為EasyDBO中的定義的DBObject對象,

    標(biāo)號3   --> 執(zhí)行將對象轉(zhuǎn)換為Map對象(屬性存儲到map中)

    標(biāo)號4  --> 執(zhí)行生成主鍵值

    標(biāo)號5  --> 通過BeanWrapper來獲取屬性值。問題來了,“FILE_ID”屬性找不到!

    看看這里的代碼:

    EasyJDB的generatorID方法:

        private void generatorID(Object obj, DBTable table) {
            
    /**
             * 若obj已經(jīng)有主鍵值則直接返回
             
    */

            
    if ((table.getIdGenerator() == null)
                    
    || "".equals(table.getIdGenerator())) {
                
    return;
            }

            
    try {
                BeanWrapper wrapper 
    = new BeanWrapper(obj);
                Object tmpId 
    = wrapper.getPropertyValue(table.getId());
                Class keyType
    =wrapper.getPropertyType(table.getId());

    BeanWrapper要獲取屬性值的屬性是怎么來的呢?table.getId(),也就是DBTable的id。

    一開始我在上面就提到了,DBTable的id是數(shù)據(jù)庫表的主鍵名,不是javaBean的屬性,那么如果你的數(shù)據(jù)庫表的主鍵名和javaBean對應(yīng)的屬性命名不一致,你能在javaBean中找到數(shù)據(jù)庫表的主鍵名的屬性嗎?也就是說你在javaBean上只能找到fileId,但是卻不能找到FILE_ID,當(dāng)然,你要去獲取FILE_ID的值,不出錯才怪!

    或許,你會說,是不是DBTable的id指javaBean的屬性啊,也就是fileId啊?應(yīng)該不會吧,我手工改動(將id指向javaBean的fileId)后,數(shù)據(jù)記錄確刪除不成功,會報:sql為空,不能執(zhí)行之類的......

    簡單的解決辦法,在DBTable增加多一個getJavaId()之類的方法,返回數(shù)據(jù)庫表在javaBean的屬性id(怎么實現(xiàn),就看你自己喜歡咯,簡單的一個辦法就是給定一個命名策略,將數(shù)據(jù)庫表主鍵,也就是id的所指向,轉(zhuǎn)換為適當(dāng)?shù)膉avaBean屬性咯)給BeanWrapper,這樣就可以了。

    是我說錯了,還是使用方法不當(dāng)?歡迎指正~~~~~~~~

    EasyDBO (http://www.easyjf.com/ 可以下載)。

    posted on 2007-06-28 12:17 三告習(xí)習(xí) 閱讀(1201) 評論(2)  編輯  收藏 所屬分類: easyJF-projects

    評論:
    # re: [EasyDBO] 是bug還是我用法不當(dāng)? EasyDBO 該完善一些的時候了吧~~[未登錄] 2007-07-16 21:12 | 天意
    看了您的文章,倍感慚愧同時更大的是收獲,只能說我們會努力做好的,同時誠摯的邀請您,希望您能加入到我們的開發(fā)中來!  回復(fù)  更多評論
      
    # re: [EasyDBO] 是bug還是我用法不當(dāng)? EasyDBO 該完善一些的時候了吧~~ 2007-07-16 21:31 | 三告習(xí)習(xí)
    @天意
    誰都有忙的時候嘛,呵呵。不過我覺得,雖然easy團(tuán)隊涉及項目很多,但是,不管哪一個項目,都應(yīng)該盡力做到最好,而不是顧此失彼。如果easy的哪怕只做一個項目,做得有聲有色了,都是很受人歡迎的。我想,springside做得很不錯
    其實也希望能為開源貢獻(xiàn)一些
    但是目前對easyJF了解多一點(diǎn)的項目只是easyDBO啊,其他的還沒有很多時間來得及研究  回復(fù)  更多評論
      
    主站蜘蛛池模板: 亚洲二区在线视频| 蜜臀亚洲AV无码精品国产午夜.| 日本一区二区三区日本免费| 亚洲AV无码XXX麻豆艾秋| 亚洲av无码成人精品区| 成人免费夜片在线观看| 国产亚洲av片在线观看16女人| 亚洲人成网站看在线播放| 无码免费午夜福利片在线| 免费看又黄又爽又猛的视频软件| 国内自产少妇自拍区免费| CAOPORM国产精品视频免费| 久久久无码精品亚洲日韩京东传媒 | 一二三四在线观看免费中文在线观看 | 亚洲人成777在线播放| 国产成人免费ā片在线观看| 一个人免费视频在线观看www| 五月天婷亚洲天综合网精品偷| 中文无码亚洲精品字幕| 国产亚洲?V无码?V男人的天堂| 狠狠入ady亚洲精品| 亚洲热妇无码AV在线播放| 成在人线AV无码免费| 野花香高清视频在线观看免费| 久久被窝电影亚洲爽爽爽 | 91高清免费国产自产拍2021| 亚洲第一se情网站| 亚洲邪恶天堂影院在线观看| 免费大片在线观看网站| 亚洲高清免费在线观看| 一区二区视频免费观看| 亚洲а∨天堂久久精品9966| 亚洲国产精品无码久久久不卡| 一级毛片免费观看不卡的| 美女扒开尿口给男人爽免费视频 | 337p欧洲亚洲大胆艺术| 亚洲午夜福利精品久久| 妞干网免费观看视频| 1000部夫妻午夜免费| 波多野结衣免费一区视频| 老司机午夜免费视频|