posts - 15,comments - 65,trackbacks - 0
                 本文最初發(fā)表在http://www.lovestblog.cn,轉(zhuǎn)載請注明出處,謝謝。
           最近在忙一個項(xiàng)目,使用的是Flex+Spring+Hibernate,期間碰到一個問題,有必要在此記錄一下,也方便有相似問題的來者參考下
                  問題描述:有一個用戶表和一個用戶詳情表,這兩個表是一個一對一的單向關(guān)聯(lián)關(guān)系,即在用戶表中一個外鍵引用用戶詳情表,我在UserInfo的映射文件中使用的是many-to-one,設(shè)置了unique="true"表示一對一關(guān)系,設(shè)置了cascade="save-update"表示的是在保存useInfo對象的時候會自動保存與之關(guān)聯(lián)的userDetails臨時對象,即我希望的是先執(zhí)行一個在用戶詳情表中的插入語句然后再執(zhí)行一個在用戶表中的插入語句,userInfo對象是從flex端傳過來的,當(dāng)然也設(shè)置了userDetails屬性的值,在userInfo的dao文件中save方法是這樣的
              public IvUserInfo save(IvUserInfo transientInstance) {
                  log.debug(
          "saving IvUserInfo instance");
                  
          try {
                      getHibernateTemplate().save(transientInstance);
                      log.debug(
          "save successful");
                  } 
          catch (RuntimeException re) {
                      log.error(
          "save failed", re);
                      
          throw re;
                  }
                  
          return transientInstance;
              }
          后面發(fā)現(xiàn)執(zhí)行的sql語句只有一條插入語句,就是在用戶表中的一個插入,由于外鍵的關(guān)聯(lián)作用,是用戶表的這條插入也無法執(zhí)行,這就是問題所在了。
                  問題解決:這個問題我也沒有具體研究Hibernate的源碼,我先寫了個測試類,發(fā)現(xiàn)僅僅在java中執(zhí)行操作的話是可以正確執(zhí)行兩條插入語句的,但是通過flex傳過來就有問題了,那說明是flex端傳參數(shù)過來的問題,于是我試著修改UserInfo的save方法:

          public IvUserInfo save(IvUserInfo transientInstance) {
                  log.debug(
          "saving IvUserInfo instance");
                  
          try {
                      IvUserDetails ud
          =new IvUserDetails();
                      ud.setQq(transientInstance.getIvUserDetails().getQq());

                      transientInstance.setIvUserDetails(ud);
                      getHibernateTemplate().save(transientInstance);
                      log.debug(
          "save successful");
                  } 
          catch (RuntimeException re) {
                      log.error(
          "save failed", re);
                      
          throw re;
                  }
                  
          return transientInstance;
              }
          這樣一來問題解決了,順利執(zhí)行了兩條插入語句。
                 如果朋友知道具體原因的話希望給我留言了,同時也希望該記錄能幫助碰到此類問題的朋友。
          posted on 2010-06-22 11:20 你假笨 閱讀(1576) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 峨山| 宿松县| 望奎县| 于都县| 四子王旗| 积石山| 万源市| 崇仁县| 华坪县| 拉萨市| 安国市| 永定县| 普兰县| 阿克| 仁布县| 班玛县| 大方县| 申扎县| 额敏县| 曲靖市| 确山县| 开化县| 和林格尔县| 义马市| 乳山市| 青海省| 西藏| 广安市| 荣昌县| 密云县| 清流县| 文成县| 久治县| 偏关县| 师宗县| 永福县| 揭西县| 平利县| 蒙自县| 田阳县| 洪雅县|