隨筆 - 11  文章 - 11  trackbacks - 0

          留言簿(2)

          隨筆分類(13)

          隨筆檔案(11)

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          通常為了實現entity class的雙向association,每添加一組實例在java中需要兩行代碼:

          persion.getAddresses().add(address);
          address.getPersons().add(person);

          但對Hibernate而已,上面的代碼會被轉化為兩條insert語句,

          為了避免這樣的情況出現需要定義inverse屬性,告訴Hibernate persion和address之間的關系:

          // !file: Person.class
          public class Person {
              // ...
              @ManyToMany(
                        targetEntity= Address.class,
                        cascade = CascadeType.ALL,
                )
              @JoinTable(
                        name="persion_address",
                        joinColumns= {@JoinColumn(name="person_id")},
                        inverseJoinColumns= {@JoinColumn(name="address_id")}
                )
                private Set<Address> adressses = new HashSet<Address> (0);
              // ...
          }
          
          // !file: Address.class
          public class Address {
              // ...
              @ManyToMany(
                      targetEntity= Persion.class,
                      cascade = CascadeType.ALL, 
                      mappedBy = "addresses"
              )
              private Set<Person> persons = new HashSet<Person>();
              // ...
          }
          

          上面的兩個annotation告訴Hibernate,Person是主,對Address中persons屬性的修改將不會產生SQL語句。

          Hibernate里,如果是Many-to-many的關系,可以任意設置主class

          通常,還可以將添加刪除關系的代碼包裝起來:

          // !file: Person.class
          public class Person {
              // ...
              public void addAddress(Address address) {
                  this.getAddresses().add(address);
                  address.getPersons().add(this);
              }
              public void removeAddress(Address address) {
                  this.getAddresses().remove(address);
                  address.getPersons().remove(this);
              }
              //...
          } 
          



          posted on 2007-03-27 21:18 hijeff 閱讀(360) 評論(0)  編輯  收藏 所屬分類: Hibernate
          主站蜘蛛池模板: 民权县| 玉林市| 万宁市| 民丰县| 西宁市| 扎赉特旗| 铜陵市| 禄丰县| 泽普县| 莱阳市| 五指山市| 兰考县| 临桂县| 德庆县| 旺苍县| 昭觉县| 贵州省| 东平县| 永春县| 丰县| 屏边| 麻栗坡县| 渝北区| 咸丰县| 凌源市| 定结县| 吉林市| 金阳县| 来安县| 新龙县| 长子县| 竹溪县| 隆林| 紫金县| 牡丹江市| 普宁市| 临沧市| 察隅县| 通道| 江华| 札达县|