已遷址

          已遷址http://www.cnblogs.com/live365wang/

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            28 隨筆 :: 0 文章 :: 1 評論 :: 0 Trackbacks
          使用Hibernate Annotations 維護多對多關系的心得

          說明
                  在HibernateAnnotations中通過@ManyToMany注解可定義多對多關聯。同時,也需要通過注解@JoinTable描述關聯表和關聯條件。對于雙向關聯,其中一端必須定義為owner,另一端必須定義為inverse(在對關聯表進行更性操作時這一端將被忽略)。被關聯端不必也不能描述物理映射,只需要一個簡單的mappedBy參數,該參數包含了主體端的屬性名,這樣就綁定了雙方的關系。

                上周六去電影院圓了兒時的夢想,看了變形金剛,超棒的一部片子 ^_^。那么就以劇院和觀眾為例講解吧。

          如何制作PO

          1)找到CUBE--需要引入哪些類:

          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系 import  java.util.ArrayList;
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系
           import  java.util.List;
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系
           import  javax.persistence.CascadeType;
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系
           import  javax.persistence.Entity;
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系
           import  javax.persistence.FetchType;
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系
           import  javax.persistence.JoinColumn;
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系
           import  javax.persistence.JoinTable;
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系
           import  javax.persistence.ManyToMany;
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系
           import  javax.persistence.Table;
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系
           import  org.hibernate.annotations.Cache;
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系
           import  org.hibernate.annotations.CacheConcurrencyStrategy;

          2)找到汽車人--主體端:
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系@SuppressWarnings(
          "serial")
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系@Entity
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系@Table(name 
          = "THEATER")
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系@Cache(usage 
          = CacheConcurrencyStrategy.READ_WRITE)
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系
          public class Theater implements Serializable {
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系    
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系    @ManyToMany(
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系            targetEntity
          =net.allen.domain.Audience.class,
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系            cascade 
          ={CascadeType.PERSIST,CascadeType.MERGE},
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系            fetch
          =FetchType.LAZY
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系    )
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系    @JoinTable(
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系            name
          ="THEATER_AUDIENCE",
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系            joinColumns
          ={@JoinColumn(name="THEATER_ID")},
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系            inverseJoinColumns
          ={@JoinColumn(name="AUDIENCE_ID")}
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系    )
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系    @Cache(usage 
          = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系    
          private List<Audience> audiences = new ArrayList<Audience>();
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系    

          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系    
          public List<Audience> getAudiences() {
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系        
          return audiences;
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系     }

          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系    

          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系    
          public void setAudiences(List<Audience> audiences) {
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系        
          this.audiences = audiences;
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系     }
              
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系 }

          功能說明:
          @ManyToMany注解
               targetEntity屬性:指向被關聯端的實體對象
               cascade屬性:與Hibernate xml配置文件中的意思一樣,這里選用兩種方式
                      CascadeType.PERSIST:若實體是處于被管理狀態,或當persist()方法被調用時,觸發級聯創建(create)操作。   
                      CascadeType.MERGE:若實體是處于被管理狀態,或當merge)方法被調用時,觸發級聯合并(merge)操作。
                       其它屬性如CascadeType.REMOVE、CascadeType.REFRESH、CascadeType.ALL等屬性可參考Hibernate Annotations Reference。
               fetch屬性:關聯關系獲取方式
                         LAZY(默認值)在第一次訪問關聯對象時才觸發相應的查詢操作。
                         另一個值EAGER是通過out join select直接獲取關聯對象
              
          @JoinTable注解
               name屬性:指定關聯表名 若不指定Hibernate可以根據既定的規則自動生成(具體規則見reference)
               joinColumns屬性:指定主體端的外鍵
               inverseJoinColumns屬性:指定被關聯端的外鍵

          @Cache注解
               usage屬性:給定了緩存的并發策略


          3)找到霸天虎--被關聯端:

          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系@SuppressWarnings(
          "serial")
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系@Entity
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系@Table(name 
          = "AUDIENCE")
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系@Cache(usage 
          = CacheConcurrencyStrategy.READ_WRITE)
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系
          public class Audience implements Serializable {
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系    
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系    @ManyToMany(
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系           cascade
          ={CascadeType.PERSIST,CascadeType.MERGE},
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系           mappedBy
          ="audiences"
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系    )
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系    

          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系    
          private List<Theater> theaters = new ArrayList<Theater>();
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系    

          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系    
          public List<Theater> getTheaters() {
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系        
          return theaters;
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系     }

          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系    

          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系    
          public void setTheaters(List<Theater> theaters) {
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系        
          this.theaters = theaters;
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系     }

          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系 }
          功能說明:
          @ManyToMany注解
               mappedBy屬性:指定了主體端的屬性名,用以綁定雙方的關系   


          汽車人,變形!--如何操作
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系    
          protected void selectWathers() {
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系        
          //1) get current theater
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系
                  Theater theater = findTheaterById("showMax");
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系        
          //2) clear theater's audiences
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系
                  theater.getAudiences().clear();
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系        
          //3) get audiences who want to watch transformers
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系
                  List<Audience> audiences = findAudiencesByMovie("transformers");
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系        
          for (Audience a: audiences) {
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系            
          //4) mountain relations
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系
                      a.getTheaters().add(theater);
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系            theater.getAudiences().add(a);
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系         }

          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系        
          //5) do save main entity
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系
                  doSaveEntity(theater);
          【轉】使用Hibernate <wbr>Annotations <wbr>維護多對多關系     }

          tips:注意第二步的操作。

           

          以上內容轉自http://www.aygfsteel.com/allen-zhe/archive/2007/08/02/133991.html 留作備用

          posted on 2011-02-22 13:49 已遷址 閱讀(202) 評論(0)  編輯  收藏 所屬分類: Hibernate
          主站蜘蛛池模板: 万盛区| 庐江县| 无棣县| 江津市| 宝兴县| 辉南县| 海盐县| 水富县| 时尚| 浪卡子县| 拉孜县| 凤翔县| 兰坪| 扬州市| 辽源市| 全椒县| 霍林郭勒市| 台北县| 读书| 岗巴县| 万州区| 乌拉特前旗| 扎赉特旗| 大城县| 龙州县| 平阴县| 衡山县| 青浦区| 东乌| 县级市| 凌云县| 金乡县| 桐城市| 哈密市| 昭通市| 宁安市| 江山市| 河源市| 博罗县| 屯昌县| 秭归县|