posts - 15,  comments - 4,  trackbacks - 0
          -------------------------------------------------------------------
          @NotFound(action=NotFoundAction.IGNORE)

          使用hibernate
          注解配置實體類的關聯關系,在many-to-one,one-to-one關聯中,一邊引用自另一邊的屬性,如果屬性值為某某的數據在數據庫不存在了,hibernate默認會拋出異常。解決此問題,加上如下注解就可以了:
          @NotFound(action=NotFoundAction.IGNORE),意思是找不到引用的外鍵數據時忽略,NotFound默認是exception

          -------------------------------------------------------------------
          cascade = CascadeType.REFRESH,cascade=CascadeType.ALL

          cascade表示級聯操作  


             CascadeType.MERGE級聯更新:若items屬性修改了那么order對象保存時同時修改items里的對象。對應EntityManager的merge方法

           
             CascadeType.PERSIST級聯刷新:獲取order對象里也同時也重新獲取最新的items時的對象。對應EntityManager的refresh(object)方法有效。即會重新查詢數據庫里的最新數據  
            

            CascadeType.REFRESH級聯保存:對order對象保存時也對items里的對象也會保存。對應EntityManager的presist方法  
            

            CascadeType.REMOVE級聯刪除:對order對象刪除也對items里的對象也會刪除。對應EntityManager的remove方法  

          CascadeType.PERSIST只有A類新增時,會級聯B對象新增。若B對象在數據庫存(跟新)在則拋異常(讓B變為持久態)

          CascadeType.MERGE指A類新增或者變化,會級聯B對象(新增或者變化)

          CascadeType.REMOVE只有A類刪除時,會級聯刪除B類;

          CascadeType.ALL包含所有;

          CascadeType.REFRESH沒用過。

          綜上:大多數情況用CascadeType.MERGE就能達到級聯跟新又不報錯,用CascadeType.ALL時要斟酌下CascadeType.REMOVE

          @Fetch:

          定義了加載關聯關系的獲取策略. FetchMode 可以是

          SELECT (在需要加載關聯的時候觸發select操作),     SUBSELECT(只對集合有效,使用了子查詢策略,詳情參考Hibernate參考文檔)

          JOIN (在加載主實體(owner entity)的時候使用SQL JOIN來加載關聯關系).

          JOIN 將覆寫任何延遲屬性 (通過 JOIN策略加載的關聯將不再具有延遲性).



          -------------------------------------------------------------------
          fetch=FetchType.LAZY
          Hibernate的數據加載方式:
          1.即時加載 immediately loading

                 實體加載完成后,立即加載其關聯的數據。
          2.延遲加載lazy loading

                 實體相關聯的數據在第一次訪問時再進行讀取。
          3.預先加載 eager loading

                  與immediately loading類似,但實體和相關聯的數據是通過一條sql同時讀取。
          4.批量加載 batch loading
                  ?



          ------------------------------------------------------------------
          EntityManager 的API
          下面是EntityManager的一些主要的接口方法:
          void persist(Object entity)
                通過調用EntityManager的persist()方法,新實體實例將轉換為受控狀態。這意謂著當persist()方法所在的事務提交時,實體的數據將保存到數據庫中。如果實體已經被持久化,那么調用persist()操作不會發生任何事情。如果對一個已經刪除的實體調用persist()操作,刪除態的實體又轉變為受控態。如果對游離狀的實體執行persist()操作,將拋出IllegalArgumentException。 在一個實體上調用persist()操作,將廣播到和實體關聯的實體上,執行相應的級聯持久化操作;

          void remove(Object entity)
                通過調用remove()方法刪除一個受控的實體。如果實體聲明為級聯刪除(cascade=REMOVE 或者cascade=ALL ),被關聯的實體也會被刪除。在一個新建狀態的實體上調用remove()操作,將被忽略。如果在游離實體上調用remove()操作,將拋出IllegalArgumentException,相關的事務將回滾。如果在已經刪除的實體上執行remove()操作,也會被忽略;

          void flush()
                將受控態的實體數據同步到數據庫中;

          T merge(T entity)
                將一個游離態的實體持久化到數據庫中,并轉換為受控態的實體;

          T find(Class entityClass, Object primaryKey)
                以主鍵查詢實體對象,entityClass是實體的類,primaryKey是主鍵值,如以下的代碼查詢Topic實體: Topic t = em.find(Topic.class,1); Query createQuery(String qlString) 根據JPA的查詢語句創建一個查詢對象Query,如下面的代碼:
          Query q= em.createQuery(""SELECT t FROM Topic t WHERE t.topicTitle LIKE :topicTitle")"); Query createNativeQuery(String sqlString)
          使用本地數據庫的SQL語句創建一個Query對象,Query通過getResultList()方法執行查詢后,返回一個List結果集,每一行數據對應一個Vector。
          使用本地數據庫的SQL語句創建一個Query對象,Query通過getResultList()方法執行查詢后,返回一個List結果集,每一行數據對應一個Vector。
          看來要學習的東東還有好多啊~~努力吧!


           

          posted @ 2013-03-05 11:51 老天 閱讀(3897) | 評論 (1)編輯 收藏
          <2013年3月>
          242526272812
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          常用鏈接

          留言簿

          隨筆檔案

          文章檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 白玉县| 新邵县| 寿宁县| 辽宁省| 喀什市| 乌拉特前旗| 东平县| 西盟| 金沙县| 贵南县| 英山县| 应城市| 同江市| 阿图什市| 轮台县| 潢川县| 沁源县| 应城市| 淳化县| 寿宁县| 布拖县| 饶河县| 桐梓县| 建平县| 德江县| 青龙| 阳曲县| 遂平县| 吉隆县| 满洲里市| 孙吴县| 沁阳市| 扶沟县| 松溪县| 乐昌市| 金门县| 林甸县| 西青区| 鲁甸县| 农安县| 新平|