java技術(shù)

          hibernate spring struts

          BlogJava 聯(lián)系 聚合 管理
            18 Posts :: 0 Stories :: 1 Comments :: 0 Trackbacks

          一對多(One-to-Many)
          使用@OneToMany批注可定義一對多關(guān)聯(lián),一對多關(guān)聯(lián)可以是雙向關(guān)聯(lián)。
          在EJB3規(guī)范中多對一這端幾乎總是雙向關(guān)聯(lián)中的主體(owner)端,而一對多這端關(guān)聯(lián)批注為@OneToMany(mappedBy...)
          @Entity
          Public class Troop{
             @OneToMany(mappedBy=”troop”)
          Public Set<Soldier> getSoldiers(){
          ......
          }

          @Entity
          Public class Soldier{
             @ManyToOne
             @JoinColumn(name=”troop_fk”)
          Public Troop getTroop(){
          ......
          }

          Troop通過troop屬性和Soldier建立一對多的雙向關(guān)聯(lián),在mappedBy端不必也不能再定義任何物理映射。
          對于一對多的雙向映射,如果要一對多這一端維護關(guān)聯(lián)關(guān)系,你需要刪除mappedBy元素并將多對一這端的@JoinColoumn的insertable和updatabel設(shè)置為false。這種方案不會得到什么明顯的優(yōu)化,而且還會增加一些附加的UPDATE語句。

          單向:
          通過在被擁有的實體端(owned entity)增加一個外鍵列來實現(xiàn)一對多單向關(guān)聯(lián)是很少見的,也是不推薦的,建議通過一個聯(lián)接表來實現(xiàn)這種關(guān)聯(lián)(下面會講到)。
          @JoinColoumn批注來描述這種單向關(guān)聯(lián)關(guān)系
          @Entity
          Public class Customer{
             @OneToMany
          @JoinColoumn(name=”CUST_ID”)
          Public Set<ticket> getTickets() {
          .....
          }
          @Entity
          Public class Ticket{
             ...
          }
          Customer通過CUST_ID列和Ticket建立了單向關(guān)聯(lián)關(guān)系
          通過關(guān)聯(lián)表處理單向關(guān)聯(lián):
          通過聯(lián)接表處理單向一對多關(guān)聯(lián)是首選方式,這種關(guān)聯(lián)通過@JoinTable批注進行描述
          @Entity
          Public class Trainer{
          @OneToMany
          @JoinTable(
             name = "TrainedMonkeys",
            jonColumns = {@JoinColumn(name="trainer_id"},
             inverseJoinColumns = @JoinColumn(name = "monkey_id")
             )
          public Set<Monkey> getTrainedMonkeys() {
                return trainedMonkeys;
             }
          ......
          }

          @Entity
          public class Monkey {
          ...//no bidir
          }

          上面這個例子中,Trainer通過TrainedMonkeys表和Monkey建立了單向關(guān)聯(lián),其中外鍵trainer_id關(guān)聯(lián)到Trainer(joinColoumn),而外鍵monkey_id關(guān)聯(lián)到Monkey(inversejionColoumns)
          默認處理機制:
          通過聯(lián)接表來建立單向一對多關(guān)聯(lián)不需要描述任何物理映像,表名由以下三個部分組成:主表(ownertable)表名+從表(the other side table)表名,指向主表的外鍵名:主表表名+下劃線+主表主鍵列名,指向從表的外鍵名:主表所對應(yīng)實體的屬性名+下劃線+從表主鍵列名,指向從表的外鍵定義為唯一約束,用來表示一對多的關(guān)聯(lián)關(guān)系。
          @Entity
          public class Trainer{
             @OneToMany
             Public Set<Tiger> getTrainedTigers(){
          ... ...
          }

          @Entity
          public class Tiger{
          .. ..//no bidir
          }
          上面這個例子中,Trainer和Tiger通過聯(lián)接表Trainer_Tiger建立單向關(guān)聯(lián)關(guān)系,其中外鍵trainer_id關(guān)聯(lián)到Trainer,而外鍵trainedTigers_id關(guān)聯(lián)到Tiger

          posted on 2009-11-05 15:26 just 閱讀(1786) 評論(0)  編輯  收藏

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 大田县| 汉沽区| 黑水县| 新河县| 泗阳县| 都安| 丰顺县| 霸州市| 平潭县| 津市市| 永靖县| 朝阳市| 五寨县| 黑山县| 梨树县| 那坡县| 沙洋县| 宣城市| 淮北市| 平湖市| 称多县| 天水市| 南宫市| 耿马| 扶绥县| 瑞昌市| 民丰县| 资中县| 绥化市| 固原市| 临沂市| 应用必备| 万州区| 保德县| 长汀县| 红安县| 班戈县| 华亭县| 奎屯市| 科尔| 临泽县|