<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并沒有實現到它聲稱的功能。

    如,當你的實體有一對一關聯或者一對多等關聯時,它并沒有能夠正確地處理外鍵值(當關聯的主鍵為自增類型時,插入關聯對象獲取到外鍵為空,被關聯的對象雖然能插入,但是這樣有舍用呢?)。

    看看它處理的過程就知道它不能正確出來外鍵值了。

    舉個具體的例子吧。

    關聯實體:

    @Table(tableName="customer",keyField="cid",keyGenerator="com.easyjf.dbo.NullIdGenerator")
    public class Customer implements Serializable {

      
    //EasyJWeb Tools自動代碼生成
      
    //屬性部份

        
    /**
         * 
         
    */

        
    private static final long serialVersionUID = 1L;

        @TableField(name
    ="cid")
        
    private String cid;
      
        @TableField(name
    ="userName")
        
    private String username;
      
        @TableField(name
    ="password")
        
    private String password;
      
        @TableField(name
    ="email")
        
    private String email;
      
        @TableField(name
    ="tel")
        
    private String tel;
      
        @TableField(name
    ="birthday")
        
    private Date birthday;
      
        @TableField(name
    ="intro")
        
    private String intro;
        
        @OneToOne(column
    ="messageId",tableName="message",type=Message.class,key="cid")
        
    private Message message;
        @ManyToOne(column
    ="messageId",tableName="",type=Message.class,key="cid")
        
    private List<Message> massages;

    //getter及setter方法

         
    public String getCid() {
            
    return cid;
        }


        
    public void setCid(String cid) {
            
    this.cid = cid;
        }

          
    public String getUsername() {
            
    return username;
        }


        
    public void setUsername(String username) {
            
    this.username = username;
        }

          
    public String getPassword() {
            
    return password;
        }


        
    public void setPassword(String password) {
            
    this.password = password;
        }

          
    public String getEmail() {
            
    return email;
        }


        
    public void setEmail(String email) {
            
    this.email = email;
        }

          
    public String getTel() {
            
    return tel;
        }


        
    public void setTel(String tel) {
            
    this.tel = tel;
        }

          
    public Date getBirthday() {
            
    return birthday;
        }


        
    public void setBirthday(Date birthday) {
            
    this.birthday = birthday;
        }

          
    public String getIntro() {
            
    return intro;
        }


        
    public void setIntro(String intro) {
            
    this.intro = intro;
        }


        
    public Message getMessage()
        
    {
            
    return message;
        }


        
    public void setMessage(Message message)
        
    {
            
    this.message = message;
        }


        
    public List<Message> getMassages()
        
    {
            
    return massages;
        }


        
    public void setMassages(List<Message> massages)
        
    {
            
    this.massages = massages;
        }

        
      }

     

    被關聯實體:

     

    @Table(tableName="message",keyField="cid",keyGenerator="com.easyjf.dbo.NullIdGenerator")
    public class Message implements Serializable {
        
        
    private static final long serialVersionUID = 1L;

        @TableField(name
    ="cid")
        
    private Long cid;
      
        @TableField(name
    ="title")
        
    private String title;
      
        @TableField(name
    ="content")
        
    private String content;
      
        @TableField(name
    ="inputUser")
        
    private String inputuser;
      
        @TableField(name
    ="inputTime")
        
    private java.util.Date inputtime;
      
        @TableField(name
    ="publish")
        
    private Integer publish;
      
        @TableField(name
    ="status")
        
    private Integer status;

         
    public Long getCid() {
            
    return cid;
        }


        
    public void setCid(Long cid) {
            
    this.cid = cid;
        }

          
    public String getTitle() {
            
    return title;
        }


        
    public void setTitle(String title) {
            
    this.title = title;
        }

          
    public String getContent() {
            
    return content;
        }


        
    public void setContent(String content) {
            
    this.content = content;
        }

          
    public String getInputuser() {
            
    return inputuser;
        }


        
    public void setInputuser(String inputuser) {
            
    this.inputuser = inputuser;
        }

          
    public java.util.Date getInputtime() {
            
    return inputtime;
        }


        
    public void setInputtime(java.util.Date inputtime) {
            
    this.inputtime = inputtime;
        }

          
    public Integer getPublish() {
            
    return publish;
        }


        
    public void setPublish(Integer publish) {
            
    this.publish = publish;
        }

          
    public Integer getStatus() {
            
    return status;
        }


        
    public void setStatus(Integer status) {
            
    this.status = status;
        }

      }

     

    測試:

    public class Test
    {
        
    public static void main(String[] args)
        
    {
    //        addAData();
            addDatas();
        }

        
        
    public static void addDatas(){
            EasyJDB db
    =EasyJDB.getInstance();
            db.setAutoCommit(
    false);
            Customer customer 
    = new Customer();
            customer.setUsername(
    "sometwo");
            customer.setBirthday(
    new Date());
            customer.setIntro(
    "某某人");
            customer.setCid(System.currentTimeMillis()
    +"");
            
            Message message1 
    = new Message();
            message1.setTitle(
    "a message");
            message1.setContent(
    "某某信息.");
            message1.setInputtime(
    new Date());
            
            Message message2 
    = new Message();
            message2.setTitle(
    "another message");
            message2.setContent(
    "另某某信息.");
            message2.setInputtime(
    new Date());
            List
    <Message> list = new ArrayList<Message>();
            list.add(message1);
            list.add(message2);
            
            customer.setMassages(list);
            db.add(customer);
            db.commit();
            db.close();
        }

        
        
    public static void addAData(){
            EasyJDB db
    =EasyJDB.getInstance();
            db.setAutoCommit(
    false);
            Customer customer 
    = new Customer();
            customer.setUsername(
    "someone");
            customer.setBirthday(
    new Date());
            customer.setIntro(
    "某人");
            customer.setCid(System.currentTimeMillis()
    +"");
            
            Message message1 
    = new Message();
            message1.setTitle(
    "a message");
            message1.setContent(
    "某某信息.");
            message1.setInputtime(
    new Date());
            customer.setMessage(message1);
            
            db.add(customer);
            db.commit();
            db.close();
        }

    }

     

    調試信息輸出:

    EasyDBO:insert into customer(password,userName,intro,email,tel,cid,birthday) values(?,?,?,?,?,?,?)
    EasyDBO:insert into message(inputUser,title,content,status,inputTime,cid,publish) values(
    ?,?,?,?,?,?,?)
    EasyDBO:insert into message(inputUser,title,content,status,inputTime,cid,publish) values(
    ?,?,?,?,?,?,?)

    數據庫的結果是,記錄插入數據庫了,只是對應的外鍵(customer表的messageId為空!這個是致命bug啊!)

    看,調試信息反映出來的對象持久化順序是先插入關聯對象customer,然后再插入被關聯對象message(或者集合messages)。

    當插入customer時,它去獲取被關聯對象的主鍵,即message.id,但是message此時為空!customer數據庫表的messageId字段只能為空了。

    當插入被關聯對象message時,由于id是自增型的,它只能在數據庫里完成id的填充,但是當整條記錄插入后,它又沒有同message對象關聯起來,即沒有hibernate所說的狀態轉換(游離狀態等)。

    然后就完了,不負責地留下未完成的數據持久使命......

    要填補這個bug,簡單的辦法就是將插入對象的順序調過來,即先插入被關聯對象(message),將生成的主鍵回傳給對象,再插入關聯對象(customer)。應該可以吧,想法如此,還沒有作修改實現。

    這么多bug,想放棄用EasyDBO了,連生成代碼工具都寫好了,卻在這時放棄........真不夠意思~~~~~~

    持久層,還是jpa吧.......國產的開源啊,要負責一些,爭氣些,不是不想支持,而是實在.........

    posted on 2007-06-28 23:10 三告習習 閱讀(1232) 評論(4)  編輯  收藏 所屬分類: easyJF-projects

    評論:
    # re: [EasyDBO] 太多另人失望的地方了...... 2007-06-29 08:32 | dennis
    不好,就去提交bug,而不是抱怨,畢竟開源不僅僅是那些貢獻者的事情  回復  更多評論
      
    # re: [EasyDBO] 太多另人失望的地方了...... 2007-06-29 09:47 | 三告習習
    @dennis
    其實也不是抱怨,因為用不用終究是自己的事情。如果能修正這些bug,我也會放上來共享。
    謝謝dennis提醒,不過用了一下發現這么多bug的確感覺不是那么爽......  回復  更多評論
      
    # re: [EasyDBO] 太多另人失望的地方了...... 2007-07-16 20:58 | 小雨
    EasyDBO解決簡單的問題很是很高效的,就像Rails中的ActiveRecord一樣,不過現在的問題確實是比較多的,不適合在大型的項目中使用。  回復  更多評論
      
    # re: [EasyDBO] 太多另人失望的地方了...... 2008-04-10 13:10 | liangzeng
    用什么EasyDBO,用hibernate 多好啊  回復  更多評論
      
    主站蜘蛛池模板: 亚洲av日韩av高潮潮喷无码| 亚洲中文字幕久久无码| 最近免费中文字幕高清大全| 久久亚洲精品国产亚洲老地址 | 免费无码成人AV片在线在线播放| 曰批全过程免费视频免费看| 亚洲大成色www永久网站| 一二三四免费观看在线电影 | 亚洲成人动漫在线观看| 又大又黄又粗又爽的免费视频| 美女在线视频观看影院免费天天看| 中文字幕亚洲码在线| 亚洲伊人久久大香线蕉综合图片| 久久精品无码一区二区三区免费| 中文字幕在线免费视频| 久久久久久亚洲精品影院| 亚洲精品高清国产一线久久| 成年性午夜免费视频网站不卡| 国产成人免费AV在线播放| 欧洲亚洲国产精华液| 亚洲精品网站在线观看你懂的| 国产亚洲精品激情都市| 免费观看一级毛片| 亚洲人成在线免费观看| 一级毛片视频免费| 亚洲日本天堂在线| 亚洲一区中文字幕久久| 亚洲午夜福利精品无码| 免费毛片在线播放| 国产h视频在线观看免费| 久久国产精品国产自线拍免费| 免费精品视频在线| 亚洲精品无码成人| 亚洲人成综合在线播放| 亚洲AV无码AV男人的天堂| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 久久精品一本到99热免费| 精精国产www视频在线观看免费| 亚洲色大成网站www久久九| 亚洲福利一区二区| 亚洲自偷自偷精品|