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

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

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

    posts - 78, comments - 34, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    2010-01-20 傳智播客—JPA與EJB

    Posted on 2010-01-20 23:20 長城 閱讀(754) 評論(0)  編輯  收藏

    今天內容為兩個版塊JPAEJB,從學習hibernateUMLJPA。他們都涉及到一個極為重要的細節——類與類、接口與接口或類與接口之間的四類關聯關系。今日上午到下午3點左右內容為JPA中處理這四類關系。我想我應該將他們系統的做一下總結,這項任務就留著后天休息來完成吧!

    近三天的課程內容除了帶給我知識上的獲取和見識的增長,更讓我感覺到一種力量!在學習WEB之前,這些互聯網的東西讓我滿頭霧水,不知所云。但在傳智播客學習到現在,WEB應用中應該沒什么還能讓我滿頭霧水的了,云計算也沒之前那么讓我感到神秘的。帶給我什么力量了?一種駕馭知識的力量!我十分有興與兩位高手租房子,我從他們身上學習到了很多知識。因為我沒讀過本科,所以計算機基礎知識不夠好。偶有時間,看一看計算機組成原理等。通過與同學的交流,我似乎已經能摸清硬件了執行原理,并不復雜。

    通過以前的工作自己掌握的知識、在傳智播客學習到的知識,以及與同事、好友、同學們的相處。我似乎已經感覺到將硬件、桌面應用、WEB應用...融匯貫通的感覺!這感覺讓我充滿力量。

    一、JPA中的關聯關系

    說實在的在學習hibernateUML時,聽著老師講關聯關系一點問題都沒有。但他們在我腦子里沒形成系統的概念。但今天學習JPA的關聯關系,讓我找到了感覺。關系關聯在我腦子里形成系統的概念,指日可待!

    1.一對多單向關聯

    典型的例子是,客戶與訂單這種一對多的關系。在客戶類的orders屬性或getOrders屬性方法上添加注解:

    @OneToMany(fetch=FetchType.EAGER,

       cascade={CascadeType.PERSIST,CascadeType.REMOVE},

       targetEntity=Order.class)

    @OneToMany”表示一對多關聯關系的注解,括號內全是他的屬性。

    fetch=FetchType.EAGER”,強迫左外連接,默認值為“LAZY”。

    cascade={CascadeType.PERSIST,CascadeType.REMOVE}”,設置保存和刪除級聯。

    targetEntity=Order.class”,相當于hibernateclass屬性。

    2.多對一單向關聯

    訂單與客戶的例子。在訂單類的customer屬性或getCustomer屬性方法上添加注解:

    @ManyToOne(cascade={CascadeType.PERSIST})

    @JoinColumn(name="cid")

    @ManyToOne”表示多對一的關聯關系的注解,括號內全是他的屬性。

    cascade={CascadeType.PERSIST}”設置保存級聯。

    @JoinColumn”設置Orders表的外鍵。

    name="cid"”外鍵的名稱。

    3.一對多(多對一)雙向關聯

    在客戶類的orders屬性或getOrders屬性方法上添加注解:

    @OneToMany(mappedBy="customer",

       fetch=FetchType.EAGER,

       cascade={CascadeType.PERSIST,CascadeType.REMOVE},

       targetEntity=Order.class)

    在訂單類的customer屬性或getCustomer屬性方法上添加注解:

    在上面的注解中只“@OneToMany”中多了一個“mappedBy="customer"”屬性,它相當于hibernate的“inverse=false”屬性,不參與對集合的控制。如果不設置“mappedBy”屬性,JPA會為一對多關聯關系設置一個中間表。

    4.一對一關聯

    使用學習hibernate時的例子,用戶包含大文本信息的地址屬性。

    外鍵關聯:

    在用戶表的Addr屬性或getAddr屬性方法上添加注解:

    @ManyToOne(cascade={CascadeType.PERSIST})

    @JoinColumn(name="cid")

    @OneToOne”為一對一關聯關系注解。

    @JoinColumn”設置外鍵。

    name="aid"”外鍵名稱為“aid”。

    unique=true”外鍵唯一性,用戶與地址一一對應。

    在地址表的User屬性或getUser屬性方法上添加注解:

    @OneToOne

    @JoinColumn(name="aid",unique=true)

    @OneToOne”為一對一關聯關系注解。

    mappedBy="addr"”取消對集合的控制權,用User實體來控制外鍵的值。

    主鍵關聯:

    在用戶表的Addr屬性或getAddr屬性方法上添加注解:

    @OneToOne”為一對一關聯關系注解。

    @PrimaryKeyJoinColumn”,設置主鍵關聯列。

    name="userid"”,本實體關聯字段的名稱。

    referencedColumnName="addrid"”,所關聯實體的表中的字段名稱。

    在地址表的User屬性或getUser屬性方法上添加注解:

    @OneToOne(mappedBy="addr")

    @OneToOne”為一對一關聯關系注解。

    mappedBy="addr"”取消對集合的控制權,用User實體來控制外鍵的值。

    5.多對多關聯

    經典的例子,教師與學生多對多關聯關系。

    Teacher實體的stus集合屬性或getStus屬性方法上添加注解:

    @OneToOne

    @PrimaryKeyJoinColumn(name="userid",referencedColumnName="addrid")

    @ManyToMany”設置多對多關聯關系。

    @JoinTable”設置關聯表。

    name="jpa_links"”中間表表名。

    joinColumns=@JoinColumn(name="tid")”設置Teacher實體對應的關聯列。數組類型,可以設置多重主鍵。

    inverseJoinColumns=@JoinColumn(name="sid")”設置Student實體對應的關聯列。數組類型,可以設置多重主鍵。

    Student實體的teas集合屬性或getTeas屬性方法上添加注解:

    @OneToOne(mappedBy="addr")

    @ManyToMany”為多對多關聯關系注解。

    mappedBy="addr"”取消對集合的控制權。

    6.繼承關系

    繼承關系有三種解決方法,我們仍然使用學習hibernate時所使用的例子。一個員工實體(Employee),一個鐘點工子實體(HourlyEmployee)和一個薪水工子實體(SalaryEmployee)。

    1).繼承關系樹對應一張表

    Employee實體類上面添加注解:

    @ManyToMany

    @JoinTable(name="jpa_links",

    joinColumns=@JoinColumn(name="tid"),

    inverseJoinColumns=@JoinColumn(name="sid"))

    @Entity”設置實體。

    @Table(name="jpa_inherit_single_ess")”設置表名。

    @Inheritance(strategy=InheritanceType.SINGLE_TABLE)”設置集成策略為單個表,將整個繼承關系樹保存在一張表中。

    @DiscriminatorColumn(name="type",discriminatorType=DiscriminatorType.STRING)”設置區分器字段名稱和類型。

    @DiscriminatorValue("ee")Employee對應的區分類型值為“ee”。

    HourlyEmployee實體類上面添加注解:

    @ManyToMany(mappedBy="stus")

    @Entity”設置實體。

    @DiscriminatorValue("he")Employee對應的區分類型值為“he”。

    SalaryEmployee實體類上面添加注解:

    @Entity

    @Table(name="jpa_inherit_single_ess")

    @Inheritance(strategy=InheritanceType.SINGLE_TABLE)

    @DiscriminatorColumn(name="type",discriminatorType=DiscriminatorType.STRING)

    @DiscriminatorValue("ee")

    @Entity”設置實體。

    @DiscriminatorValue("se")Employee對應的區分類型值為“se”。

    2).每個類對應一張表,使用外鍵關聯。

    Employee實體類上面添加注解:

    @Entity”設置實體。

    @Table(name="jpa_inherit_join_ees")”設置表名。

    @Inheritance(strategy=InheritanceType.JOINED)”設置集成策略為聯合,為繼承關系樹中每個成員創建一個表,并使用外鍵關聯(父類的主鍵被做為子類的外鍵)。

    HourlyEmployee實體類上面添加注解:

    @Entity

    @DiscriminatorValue("he")

    @Entity”設置實體。

    @Table(name="jpa_inherit_join_hes")”設置表名。

    @PrimaryKeyJoinColumn(name="eeid")”設置外鍵。

    SalaryEmployee實體類上面添加注解:

    @Entity

    @DiscriminatorValue("se")

    @Entity”設置實體。

    @Table(name="jpa_inherit_join_ses")”設置表名。

    @PrimaryKeyJoinColumn(name="eeid")”設置外鍵。

    3).聯合表,每個類單獨一個表,使用union聯合。

    Employee實體類上面添加注解:

    @Entity

    @Table(name="jpa_inherit_join_ees")

    @Inheritance(strategy=InheritanceType.JOINED)

    @Entity”設置實體。

    @Table(name="jpa_inherit_join_ess")”設置表名。

    @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)”設置集成策略為union,為繼承關系樹中的每個成員創建一張表,每個表包含全信息(子類表中包含父類屬性的字段)。

    HourlyEmployee實體類上面添加注解:

    @Entity”設置實體。

    SalaryEmployee實體類上面添加注解:

    @Entity

    @Table(name="jpa_inherit_join_hes")

    @PrimaryKeyJoinColumn(name="eeid")

    @Entity”設置實體。

    二、EJB3簡介

    在本文中將對新的規范進行一個概要性的介紹,包括新增的元數據支持,EJBQL的修改,實體Bean模型訪問bean上下文的新方法和運行時環境等等。作者還討論了EJB在未來要作出的調整以及EJB3.0與其他開發規范之間的關系。

    來自:http://developer.51cto.com/art/200510/6284.htm 

    三、EJB3HelloWorld!”

    我們使用EJB3編寫一個“HelloWorld!”程序:

    一、配置JBOSS服務器

    1.我們使用的是“jboss-4.2.2.GA”。

    2.將“jboss-4.2.2.GA”放置在非中文路徑目錄。、

    3.添加環境變量“JBOSS_HOME”,值為“jboss-4.2.2.GA”所在目錄。

    4.修改JBOSS服務器端口,配置文件為“jboss-4.2.2.GA\server\default\deploy\jboss-web.deployer\server.xml”。將其中的8080端口修改為8088端口。

    5.IDE中配置JBOSS服務器,指定JBOSS4.X服務器所在目錄。

    二、EJB組件

    1.創建一個普通Java工程,命名為“EJB3_HW_EJB”。

    2.hibernate3.1目錄下的“jpa”子目錄中的所有jar包導入到工程。

    3.在工程中添加一個接口“cn.itcast.cc.ejb3.ejb.HelloWorld”:

    @Entity

    @Table(name="jpa_inherit_join_ses")

    @PrimaryKeyJoinColumn(name="eeid")

    4.編寫一個“HelloWorld”接口的實現類“cn.itcast.cc.ejb3.ejb.HelloWorldImpl”:

    @Entity

    @Table(name="jpa_inherit_join_ess")

    @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)

    @Entity

    5.將工程“EJB3_HW_EJB”導出為“EJB3_HW_EJB.jar”包。

    6.將“EJB3_HW_EJB.jar”拷貝到“JBOSS”的“\server\default\deploy”目錄下,JBOSS服務器會自動部署。

    三、WEB應用

    1.創建一個WEB應用工程,命名為“EJB3_HW_WEB”。

    2.將上邊的EJB組件工程“”添加為WEB應用工程的Required Project。(在“Configure Build Path”中設置)

    3.將“index.jsp”頁面的內容設置為:

    @Entity

    import javax.ejb.Local;

    @Local

    public interface HelloWorld {

    String hello(String str);

    }

    import javax.ejb.Stateless;

    @Stateless

    public class HelloWorldImpl implements HelloWorld {

    public String hello(String str) {

    System.out.println(str);

    return "Hello "+str+" ,welcome to EJB3!";

    }

    }

    4.將工程“EJB3_HW_WEB”導出為“EJB3_HW_WEB.war”包。

    5.將“EJB3_HW_WEB.war”拷貝到“JBOSS”的“\server\default\deploy”目錄下,JBOSS服務器會自動部署。

    四、運行

    1.IDE中啟動JBOSS服務器。

    2.打開瀏覽器。

    3.輸入URLhttp://localhost:8088/EJB3_HW_WEB/index.jsp”。

    4.在輸出容器中輸出:“23:15:51,683 INFO  [STDOUT] changcheng”。

    5.JSP頁面中輸出:“Hello changcheng ,welcome to EJB3! 

    OK,今天的內容到此結束!


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


    網站導航:
     
    主站蜘蛛池模板: 亚洲精品福利在线观看| 不卡精品国产_亚洲人成在线| 两个人看的www高清免费观看| 日韩成人免费视频播放| 亚洲精品无码久久久久A片苍井空| 国产精品免费观看久久| 亚洲一级黄色视频| japanese色国产在线看免费| 亚洲国产综合人成综合网站| 2020久久精品亚洲热综合一本 | 色欲aⅴ亚洲情无码AV| 国产精品免费无遮挡无码永久视频| 亚洲日产无码中文字幕| 嫩草成人永久免费观看| 亚洲高清资源在线观看| 三级毛片在线免费观看| 亚洲国产精品日韩| 好吊色永久免费视频大全 | 亚洲国产精品成人综合色在线婷婷| 永久在线观看www免费视频| 国产福利电影一区二区三区,亚洲国模精品一区 | 久久亚洲国产精品五月天婷| 国产一级一毛免费黄片| 亚洲精品免费视频| 永久免费毛片在线播放| 亚洲aⅴ天堂av天堂无码麻豆| 国产精品亚洲美女久久久 | 美女羞羞免费视频网站| 亚洲熟妇av一区二区三区| 最近中文字幕2019高清免费| 亚洲精品天堂成人片AV在线播放| 亚洲av无码成人精品区在线播放| 免费91麻豆精品国产自产在线观看 | 亚洲AV永久无码精品一百度影院| 日本最新免费网站| 精品久久久久久亚洲综合网| 亚洲中文字幕无码久久精品1| 本道天堂成在人线av无码免费| 久久久久亚洲AV无码永不| 99re免费在线视频| 久久无码av亚洲精品色午夜|