<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

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

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

    cascade表示級(jí)聯(lián)操作  


       CascadeType.MERGE級(jí)聯(lián)更新:若items屬性修改了那么order對(duì)象保存時(shí)同時(shí)修改items里的對(duì)象。對(duì)應(yīng)EntityManager的merge方法

     
       CascadeType.PERSIST級(jí)聯(lián)刷新:獲取order對(duì)象里也同時(shí)也重新獲取最新的items時(shí)的對(duì)象。對(duì)應(yīng)EntityManager的refresh(object)方法有效。即會(huì)重新查詢數(shù)據(jù)庫里的最新數(shù)據(jù)  
      

      CascadeType.REFRESH級(jí)聯(lián)保存:對(duì)order對(duì)象保存時(shí)也對(duì)items里的對(duì)象也會(huì)保存。對(duì)應(yīng)EntityManager的presist方法  
      

      CascadeType.REMOVE級(jí)聯(lián)刪除:對(duì)order對(duì)象刪除也對(duì)items里的對(duì)象也會(huì)刪除。對(duì)應(yīng)EntityManager的remove方法  

    CascadeType.PERSIST只有A類新增時(shí),會(huì)級(jí)聯(lián)B對(duì)象新增。若B對(duì)象在數(shù)據(jù)庫存(跟新)在則拋異常(讓B變?yōu)槌志脩B(tài))

    CascadeType.MERGE指A類新增或者變化,會(huì)級(jí)聯(lián)B對(duì)象(新增或者變化)

    CascadeType.REMOVE只有A類刪除時(shí),會(huì)級(jí)聯(lián)刪除B類;

    CascadeType.ALL包含所有;

    CascadeType.REFRESH沒用過。

    綜上:大多數(shù)情況用CascadeType.MERGE就能達(dá)到級(jí)聯(lián)跟新又不報(bào)錯(cuò),用CascadeType.ALL時(shí)要斟酌下CascadeType.REMOVE

    @Fetch:

    定義了加載關(guān)聯(lián)關(guān)系的獲取策略. FetchMode 可以是

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

    JOIN (在加載主實(shí)體(owner entity)的時(shí)候使用SQL JOIN來加載關(guān)聯(lián)關(guān)系).

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



    -------------------------------------------------------------------
    fetch=FetchType.LAZY
    Hibernate的數(shù)據(jù)加載方式:
    1.即時(shí)加載 immediately loading

           實(shí)體加載完成后,立即加載其關(guān)聯(lián)的數(shù)據(jù)。
    2.延遲加載lazy loading

           實(shí)體相關(guān)聯(lián)的數(shù)據(jù)在第一次訪問時(shí)再進(jìn)行讀取。
    3.預(yù)先加載 eager loading

            與immediately loading類似,但實(shí)體和相關(guān)聯(lián)的數(shù)據(jù)是通過一條sql同時(shí)讀取。
    4.批量加載 batch loading
            ?



    ------------------------------------------------------------------
    EntityManager 的API
    下面是EntityManager的一些主要的接口方法:
    void persist(Object entity)
          通過調(diào)用EntityManager的persist()方法,新實(shí)體實(shí)例將轉(zhuǎn)換為受控狀態(tài)。這意謂著當(dāng)persist()方法所在的事務(wù)提交時(shí),實(shí)體的數(shù)據(jù)將保存到數(shù)據(jù)庫中。如果實(shí)體已經(jīng)被持久化,那么調(diào)用persist()操作不會(huì)發(fā)生任何事情。如果對(duì)一個(gè)已經(jīng)刪除的實(shí)體調(diào)用persist()操作,刪除態(tài)的實(shí)體又轉(zhuǎn)變?yōu)槭芸貞B(tài)。如果對(duì)游離狀的實(shí)體執(zhí)行persist()操作,將拋出IllegalArgumentException。 在一個(gè)實(shí)體上調(diào)用persist()操作,將廣播到和實(shí)體關(guān)聯(lián)的實(shí)體上,執(zhí)行相應(yīng)的級(jí)聯(lián)持久化操作;

    void remove(Object entity)
          通過調(diào)用remove()方法刪除一個(gè)受控的實(shí)體。如果實(shí)體聲明為級(jí)聯(lián)刪除(cascade=REMOVE 或者cascade=ALL ),被關(guān)聯(lián)的實(shí)體也會(huì)被刪除。在一個(gè)新建狀態(tài)的實(shí)體上調(diào)用remove()操作,將被忽略。如果在游離實(shí)體上調(diào)用remove()操作,將拋出IllegalArgumentException,相關(guān)的事務(wù)將回滾。如果在已經(jīng)刪除的實(shí)體上執(zhí)行remove()操作,也會(huì)被忽略;

    void flush()
          將受控態(tài)的實(shí)體數(shù)據(jù)同步到數(shù)據(jù)庫中;

    T merge(T entity)
          將一個(gè)游離態(tài)的實(shí)體持久化到數(shù)據(jù)庫中,并轉(zhuǎn)換為受控態(tài)的實(shí)體;

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


     

    posted @ 2013-03-05 11:51 老天 閱讀(3893) | 評(píng)論 (1)編輯 收藏
    Struts2的下載地址:
    http://struts.apache.org/download.cgi
    目前建議下載版本:2.2.1GA版

    Hibernate下載地址:
    http://www.hibernate.org/downloads
    目前建議下載版本:3.6.0 Final版

    Spring的下載地址:
    http://www.springsource.org/download
    目前建議下載版本:穩(wěn)定版3.0.5

     
     
     
    2013-1-15  
    1、struts2  top關(guān)鍵字理解。 
    1).top 指代當(dāng)前迭代元素,可以為對(duì)象;
    2).這里的top可用[0].top替代,但不能使用[0];[0]代表整個(gè)棧對(duì)象。如果單純調(diào)用[0]將會(huì)調(diào)用其 toString()方法輸出對(duì)象信息;



    2、刪除信息時(shí)錯(cuò)誤日志:
    java.lang.IllegalArgumentException: Removing a detached instance

     Detached - a detached instance is an object that has been persistent, but its Session has been closed. The reference to the

          object is still valid, of course, and the detached instance might even be modified in this state. A detached instance can be

          reattached to a new Session at a later point in time, making it (and all the modifications) persistent again

          現(xiàn)在應(yīng)該明白了吧,在刪除之前把這個(gè)Detached instance綁定到當(dāng)前的Sesssion,在用當(dāng)前Sesssion刪除此instance。修改后的代碼如


    解決辦法:
    public void delete(SASVo  vo) {
                   entityManager.remove( entityManager.merge(vo));
            }
    posted @ 2013-01-15 16:54 老天 閱讀(384) | 評(píng)論 (1)編輯 收藏

    dom是解析xml的底層接口之一(另一種是sax)  
    而jdom和dom4j則是基于底層api的更高級(jí)封裝   
    dom是通用的,而jdom和dom4j則是面向java語言的 
      
        DOM 是用與平臺(tái)和語言無關(guān)的方式表示 XML 文檔的官方 W3C 標(biāo)準(zhǔn)。DOM 是以層次結(jié)構(gòu)組織的節(jié)點(diǎn)或信息片斷的集合。這個(gè)層次結(jié)構(gòu)允許開發(fā)人員在樹中尋找特定信息。分析該結(jié)構(gòu)通常需要加載整個(gè)文檔和構(gòu)造層次結(jié)構(gòu),然后才能做任何工作。由于它是基于信息層次的,因而 DOM 被認(rèn)為是基于樹或基于對(duì)象的。DOM 以及廣義的基于樹的處理具有幾個(gè)優(yōu)點(diǎn)。首先,由于樹在內(nèi)存中是持久的,因此可以修改它以便應(yīng)用程序能對(duì)數(shù)據(jù)和結(jié)構(gòu)作出更改。它還可以在任何時(shí)候在樹中上下導(dǎo)航,而不是像 SAX 那樣是一次性的處理。DOM 使用起來也要簡單得多。
    XML的四種解析器(dom,sax,jdom,dom4j)原理及性能比較(轉(zhuǎn)自zsq)    
    1、DOM
        DOM 是用與平臺(tái)和語言無關(guān)的方式表示 XML 文檔的官方 W3C 標(biāo)準(zhǔn)。DOM 是以層次結(jié)構(gòu)組織的節(jié)點(diǎn)或信息片斷的集合。這個(gè)層次結(jié)構(gòu)允許開發(fā)人員在樹中尋找特定信息。分析該結(jié)構(gòu)通常需要加載整個(gè)文檔和構(gòu)造層次結(jié)構(gòu),然后才能做任何工作。由于它是基于信息層次的,因而 DOM 被認(rèn)為是基于樹或基于對(duì)象的。DOM 以及廣義的基于樹的處理具有幾個(gè)優(yōu)點(diǎn)。
        首先,由于樹在內(nèi)存中是持久的,因此可以修改它以便應(yīng)用程序能對(duì)數(shù)據(jù)和結(jié)構(gòu)作出更改。它還可以在任何時(shí)候在樹中上下導(dǎo)航,而不是像 SAX 那樣是一次性的處理。DOM 使用起來也要簡單得多。
        另一方面,對(duì)于特別大的文檔,解析和加載整個(gè)文檔可能很慢且很耗資源,因此使用其他手段來處理這樣的數(shù)據(jù)會(huì)更好。這些基于事件的模型,比如 SAX。
    2、SAX 
        這種處理的優(yōu)點(diǎn)非常類似于流媒體的優(yōu)點(diǎn)。分析能夠立即開始,而不是等待所有的數(shù)據(jù)被處理。而且,由于應(yīng)用程序只是在讀取數(shù)據(jù)時(shí)檢查數(shù)據(jù),因此不需要將數(shù)據(jù)存儲(chǔ)在內(nèi)存中。這對(duì)于大型文檔來說是個(gè)巨大的優(yōu)點(diǎn)。事實(shí)上,應(yīng)用程序甚至不必解析整個(gè)文檔;它可以在某個(gè)條件得到滿足時(shí)停止解析。一般來說,SAX 還比它的替代者 DOM 快許多。
    3、選擇 DOM 還是選擇 SAX ? 
        對(duì)于需要自己編寫代碼來處理 XML 文檔的開發(fā)人員來說,選擇 DOM 還是 SAX 解析模型是一個(gè)非常重要的設(shè)計(jì)決策。 
        DOM 采用建立樹形結(jié)構(gòu)的方式訪問 XML 文檔,而 SAX 采用的事件模型。 
        DOM 解析器把 XML 文檔轉(zhuǎn)化為一個(gè)包含其內(nèi)容的樹,并可以對(duì)樹進(jìn)行遍歷。用 DOM 解析模型的優(yōu)點(diǎn)是編程容易,開發(fā)人員只需要調(diào)用建樹的指令,然后利用navigation APIs訪問所需的樹節(jié)點(diǎn)來完成任務(wù)。可以很容易的添加和修改樹中的元素。然而由于使用 DOM 解析器的時(shí)候需要處理整個(gè) XML 文檔,所以對(duì)性能和內(nèi)存的要求比較高,尤其是遇到很大的 XML 文件的時(shí)候。由于它的遍歷能力,DOM 解析器常用于 XML 文檔需要頻繁的改變的服務(wù)中。
        SAX 解析器采用了基于事件的模型,它在解析 XML 文檔的時(shí)候可以觸發(fā)一系列的事件,當(dāng)發(fā)現(xiàn)給定的tag的時(shí)候,它可以激活一個(gè)回調(diào)方法,告訴該方法制定的標(biāo)簽已經(jīng)找到。SAX 對(duì)內(nèi)存的要求通常會(huì)比較低,因?yàn)樗岄_發(fā)人員自己來決定所要處理的tag。特別是當(dāng)開發(fā)人員只需要處理文檔中所包含的部分?jǐn)?shù)據(jù)時(shí),SAX 這種擴(kuò)展能力得到了更好的體現(xiàn)。但用 SAX 解析器的時(shí)候編碼工作會(huì)比較困難,而且很難同時(shí)訪問同一個(gè)文檔中的多處不同數(shù)據(jù)。
    4、JDOM 
        JDOM的目的是成為 Java 特定文檔模型,它簡化與 XML 的交互并且比使用 DOM 實(shí)現(xiàn)更快。由于是第一個(gè) Java 特定模型,JDOM 一直得到大力推廣和促進(jìn)。正在考慮通過“Java 規(guī)范請(qǐng)求 JSR-102”將它最終用作“Java 標(biāo)準(zhǔn)擴(kuò)展”。從 2000 年初就已經(jīng)開始了 JDOM 開發(fā)。
        JDOM 與 DOM 主要有兩方面不同。首先,JDOM 僅使用具體類而不使用接口。這在某些方面簡化了 API,但是也限制了靈活性。第二,API 大量使用了 Collections 類,簡化了那些已經(jīng)熟悉這些類的 Java 開發(fā)者的使用。
        JDOM 文檔聲明其目的是“使用 20%(或更少)的精力解決 80%(或更多)Java/XML 問題”(根據(jù)學(xué)習(xí)曲線假定為 20%)。JDOM 對(duì)于大多數(shù) Java/XML 應(yīng)用程序來說當(dāng)然是有用的,并且大多數(shù)開發(fā)者發(fā)現(xiàn) API 比 DOM 容易理解得多。JDOM 還包括對(duì)程序行為的相當(dāng)廣泛檢查以防止用戶做任何在 XML 中無意義的事。然而,它仍需要您充分理解 XML 以便做一些超出基本的工作(或者甚至理解某些情況下的錯(cuò)誤)。這也許是比學(xué)習(xí) DOM 或 JDOM 接口都更有意義的工作。
        JDOM 自身不包含解析器。它通常使用 SAX2 解析器來解析和驗(yàn)證輸入 XML 文檔(盡管它還可以將以前構(gòu)造的 DOM 表示作為輸入)。它包含一些轉(zhuǎn)換器以將 JDOM 表示輸出成 SAX2 事件流、DOM 模型或 XML 文本文檔。JDOM 是在 Apache 許可證變體下發(fā)布的開放源碼。
    5、DOM4J 
        雖然 DOM4J 代表了完全獨(dú)立的開發(fā)結(jié)果,但最初,它是 JDOM 的一種智能分支。它合并了許多超出基本 XML 文檔表示的功能,包括集成的 XPath 支持、XML Schema 支持以及用于大文檔或流化文檔的基于事件的處理。它還提供了構(gòu)建文檔表示的選項(xiàng),它通過 DOM4J API 和標(biāo)準(zhǔn) DOM 接口具有并行訪問功能。從 2000 下半年開始,它就一直處于開發(fā)之中。
        為支持所有這些功能,DOM4J 使用接口和抽象基本類方法。DOM4J 大量使用了 API 中的 Collections 類,但是在許多情況下,它還提供一些替代方法以允許更好的性能或更直接的編碼方法。直接好處是,雖然 DOM4J 付出了更復(fù)雜的 API 的代價(jià),但是它提供了比 JDOM 大得多的靈活性。
        在添加靈活性、XPath 集成和對(duì)大文檔處理的目標(biāo)時(shí),DOM4J 的目標(biāo)與 JDOM 是一樣的:針對(duì) Java 開發(fā)者的易用性和直觀操作。它還致力于成為比 JDOM 更完整的解決方案,實(shí)現(xiàn)在本質(zhì)上處理所有 Java/XML 問題的目標(biāo)。在完成該目標(biāo)時(shí),它比 JDOM 更少強(qiáng)調(diào)防止不正確的應(yīng)用程序行為。
        DOM4J 是一個(gè)非常非常優(yōu)秀的Java XML API,具有性能優(yōu)異、功能強(qiáng)大和極端易用使用的特點(diǎn),同時(shí)它也是一個(gè)開放源代碼的軟件。如今你可以看到越來越多的 Java 軟件都在使用 DOM4J 來讀寫 XML,特別值得一提的是連 Sun 的 JAXM 也在用 DOM4J。
    6、總述 
        JDOM 和 DOM 在性能測試時(shí)表現(xiàn)不佳,在測試 10M 文檔時(shí)內(nèi)存溢出。在小文檔情況下還值得考慮使用 DOM 和 JDOM。雖然 JDOM 的開發(fā)者已經(jīng)說明他們期望在正式發(fā)行版前專注性能問題,但是從性能觀點(diǎn)來看,它確實(shí)沒有值得推薦之處。另外,DOM 仍是一個(gè)非常好的選擇。DOM 實(shí)現(xiàn)廣泛應(yīng)用于多種編程語言。它還是許多其它與 XML 相關(guān)的標(biāo)準(zhǔn)的基礎(chǔ),因?yàn)樗将@得 W3C 推薦(與基于非標(biāo)準(zhǔn)的 Java 模型相對(duì)),所以在某些類型的項(xiàng)目中可能也需要它(如在 javascript 中使用 DOM)。
        SAX表現(xiàn)較好,這要依賴于它特定的解析方式。一個(gè) SAX 檢測即將到來的XML流,但并沒有載入到內(nèi)存(當(dāng)然當(dāng)XML流被讀入時(shí),會(huì)有部分文檔暫時(shí)隱藏在內(nèi)存中)。
        無疑,DOM4J是最好的,目前許多開源項(xiàng)目中大量采用 DOM4J,例如大名鼎鼎的 Hibernate 也用 DOM4J 來讀取 XML 配置文件。如果不考慮可移植性,那就采用DOM4J吧!

    posted @ 2012-12-17 16:19 老天 閱讀(231) | 評(píng)論 (0)編輯 收藏
    <2012年12月>
    2526272829301
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345

    常用鏈接

    留言簿

    隨筆檔案

    文章檔案

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 四虎影视大全免费入口| 美女被免费喷白浆视频| 亚洲免费在线观看| 在线亚洲v日韩v| 四虎精品亚洲一区二区三区| 亚洲AV香蕉一区区二区三区| 日韩伦理片电影在线免费观看| 亚洲国产成人精品无码区二本| 在线播放免费播放av片| 精品久久久久久亚洲综合网| 四虎影视精品永久免费网站| 一个人免费播放在线视频看片| 在线亚洲精品自拍| 日韩在线永久免费播放| 亚洲国产成人综合| 日美韩电影免费看| 中美日韩在线网免费毛片视频 | 亚洲日本香蕉视频观看视频| 亚洲国产精品免费观看| 亚洲熟妇无码AV不卡在线播放 | 鲁大师在线影院免费观看 | 女人被弄到高潮的免费视频| 亚洲国产成人AV网站| 亚洲国产三级在线观看| 精品免费久久久久久久| 亚洲变态另类一区二区三区 | 国产精品成人免费一区二区| 特级aa**毛片免费观看| 国产亚洲成av人片在线观看| 免费h片在线观看网址最新| 校园亚洲春色另类小说合集| 国产v亚洲v天堂无码网站| 黄色成人免费网站| 美女被免费网站视频在线| 午夜亚洲www湿好大| 日本不卡高清中文字幕免费| 97无码人妻福利免费公开在线视频| 亚洲第一永久在线观看| 男人的天堂亚洲一区二区三区 | 精品国产亚洲一区二区三区在线观看| 亚洲一区二区三区在线视频|