<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片不卡在线观看| 国产女高清在线看免费观看| 亚洲无码一区二区三区| 最新中文字幕电影免费观看| 亚洲第一男人天堂| 一个人看的hd免费视频| 亚洲AV成人精品日韩一区18p| 亚洲AV成人无码久久精品老人| 好猛好深好爽好硬免费视频| 午夜宅男在线永久免费观看网| 国产亚洲精品激情都市| 亚洲av乱码一区二区三区| 91免费播放人人爽人人快乐| 国产亚洲av人片在线观看| 国产精品内射视频免费| 久久综合日韩亚洲精品色| 在线精品自拍亚洲第一区| 日本免费中文视频| 亚洲精品视频在线播放| a一级毛片免费高清在线| 亚洲毛片αv无线播放一区| 亚洲熟妇丰满xxxxx| 免费jjzz在线播放国产| 国产在线播放线91免费| 四虎成人免费网站在线| 亚洲欧洲日产国码在线观看| 97人妻精品全国免费视频| 国产精品无码免费视频二三区| 成人亚洲国产精品久久| 免费a级毛片无码a∨蜜芽试看| 色播亚洲视频在线观看| 中文字幕在线免费观看视频| 亚洲精品私拍国产福利在线| 国产精品成人免费一区二区| 成在人线av无码免费高潮水| 亚洲国产香蕉碰碰人人| 日本不卡在线观看免费v| 国产午夜无码精品免费看 |