隨筆 - 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
          主站蜘蛛池模板: 海城市| 南投县| 宁国市| 韶山市| 乌兰察布市| 罗甸县| 浦江县| 营山县| 安顺市| 苍溪县| 昌宁县| 綦江县| 千阳县| 万盛区| 青岛市| 克东县| 任丘市| 黔西县| 肇东市| 博乐市| 潮安县| 寿宁县| 轮台县| 鹿邑县| 饶阳县| 台江县| 无锡市| 名山县| 黑河市| 封丘县| 鹤庆县| 托克逊县| 邹城市| 萨迦县| 肥乡县| 克山县| 凉城县| 莒南县| 平原县| 沙洋县| 赣州市|