瘋狂

          STANDING ON THE SHOULDERS OF GIANTS
          posts - 481, comments - 486, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          mappedBy跟JoinColumn/JoinTable .

          Posted on 2011-09-30 14:28 瘋狂 閱讀(6522) 評論(0)  編輯  收藏 所屬分類: hibernate

          對于mappedBy復(fù)習(xí)下:

          a) 只有OneToOne,OneToMany,ManyToMany上才有mappedBy屬性,ManyToOne不存在該屬性;
          b) mappedBy標簽一定是定義在the owned side(被擁有方的),他指向the owning side(擁有方);
          c) mappedBy的含義,應(yīng)該理解為,擁有方能夠自動維護 跟被擁有方的關(guān)系;
             當然,如果從被擁有方,通過手工強行來維護擁有方的關(guān)系也是可以做到的。

          d) mappedBy跟JoinColumn/JoinTable總是處于互斥的一方,可以理解為正是由于擁有方的關(guān)聯(lián)被擁有方的字段存在,擁有方才擁有了被 擁有方。mappedBy這方定義的JoinColumn/JoinTable總是失效的,不會建立對應(yīng)的字段或者表

           


          人跟身份證雙向關(guān)聯(lián)

          在Person 里面定義的注解:

          @OneToOne(cascade={CascadeType.ALL},optional=true)
          public IDCard getIdCard() {
                   return idCard;
          }

          在IDCard 里面定義的注釋:
          @OneToOne(cascade=CascadeType.ALL,mappedBy="idCard" , optional=false)
          public Person getPerson() {
                 return person;
          }
          多了一個mappedBy這個方法,它表示什么呢?它表示當前所在表和Person的關(guān)系是定義在Person里面的idCard這個成員上面的,它表示此表是一對一關(guān)系中的從表,也就是關(guān)系是在person表里面維護的 ,這一點很重要 . Person表是關(guān)系的維護者,owner side,有主導(dǎo)權(quán),它有個外鍵指向IDCard。
          我們也可以讓主導(dǎo)權(quán)在IDCard上面,也就是讓它產(chǎn)生一個指向Person的外鍵,這也是可以的,但是最好是讓Person來維護整個關(guān)系,這樣更符合我們正常的思維 .

          我們也可以看到在Person里面IDCard是注釋是optional=true,也就是說一個人是可以沒有身份證的,但是一個身份證不可以沒有人,所以在IDCard里面注釋person的時候,optional就為false了,這樣就可以防止一個空的身份證記錄進數(shù)據(jù)庫.

          主站蜘蛛池模板: 定襄县| 孟村| 缙云县| 贵港市| 淄博市| 曲周县| 汶川县| 平陆县| 兴化市| 新建县| 佛冈县| 景德镇市| 庆云县| 琼结县| 祁连县| 改则县| 贵德县| 海口市| 修水县| 大宁县| 察雅县| 藁城市| 义马市| 奉化市| 易门县| 漳平市| 武邑县| 天峨县| 城步| 舞阳县| 泸水县| 中阳县| 崇义县| 若羌县| 涟水县| 南乐县| 资兴市| 陇西县| 金坛市| 临泉县| 广南县|