隨筆 - 11  文章 - 11  trackbacks - 0

          留言簿(2)

          隨筆分類(13)

          隨筆檔案(11)

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

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

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

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

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

          // !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>();
              // ...
          }
          

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

          Hibernate里,如果是Many-to-many的關(guān)系,可以任意設(shè)置主class

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

          // !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 閱讀(357) 評論(0)  編輯  收藏 所屬分類: Hibernate
          主站蜘蛛池模板: 灵台县| 达日县| 海淀区| 高尔夫| 惠水县| 常宁市| 远安县| 兰坪| 乐亭县| 泰州市| 隆安县| 长子县| 昌吉市| 黄骅市| 皮山县| 尉犁县| 沾化县| 葫芦岛市| 宁夏| 明水县| 大名县| 上杭县| 格尔木市| 五大连池市| 泰安市| 马尔康县| 仙居县| 资中县| 尖扎县| 突泉县| 湘阴县| 双柏县| 中宁县| 同德县| 吐鲁番市| 独山县| 苍梧县| 铜鼓县| 蒲江县| 龙口市| 利津县|