<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-126  評論-247  文章-5  trackbacks-0

    假設,一個農場產出多種植物,具體的某一植物產于某一農場。

     1 package net.yeah.fancydeepin.po;
     2 
     3 import java.io.Serializable;
     4 import java.util.Set;
     5 import javax.persistence.Column;
     6 import javax.persistence.Entity;
     7 import javax.persistence.GeneratedValue;
     8 import javax.persistence.Id;
     9 import javax.persistence.OneToMany;
    10 /**
    11  * -----------------------------------------
    12  * @描述  農場
    13  * @作者  fancy
    14  * @郵箱  fancydeepin@yeah.net
    15  * @日期  2012-10-21 <p>
    16  * -----------------------------------------
    17  */
    18 @Entity
    19 public class Farm implements Serializable{
    20 
    21     private static final long serialVersionUID = 1L;
    22     
    23     private Integer id;
    24     private String  name;
    25     private Set<Plant> plantSet;
    26     
    27     @Id
    28     @GeneratedValue
    29     public Integer getId() {
    30         return id;
    31     }
    32     @Column(length = 18, nullable = false)
    33     public String getName() {
    34         return name;
    35     }
    36     @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    37     public Set<Plant> getPlantSet() {
    38         return plantSet;
    39     }
    40     public void setId(Integer id) {
    41         this.id = id;
    42     }
    43     public void setName(String name) {
    44         this.name = name;
    45     }
    46     public void setPlantSet(Set<Plant> plantSet) {
    47         this.plantSet = plantSet;
    48     }
    49 }


     1 package net.yeah.fancydeepin.po;
     2 
     3 import java.io.Serializable;
     4 import javax.persistence.Column;
     5 import javax.persistence.Entity;
     6 import javax.persistence.GeneratedValue;
     7 import javax.persistence.Id;
     8 /**
     9  * -----------------------------------------
    10  * @描述  植物
    11  * @作者  fancy
    12  * @郵箱  fancydeepin@yeah.net
    13  * @日期  2012-10-21 <p>
    14  * -----------------------------------------
    15  */
    16 @Entity
    17 public class Plant implements Serializable{
    18 
    19     private static final long serialVersionUID = 1L;
    20     
    21     private Integer id;
    22     private String  name;
    23     
    24     @Id
    25     @GeneratedValue
    26     public Integer getId() {
    27         return id;
    28     }
    29     @Column(length = 18, nullable = false)
    30     public String getName() {
    31         return name;
    32     }
    33     public void setId(Integer id) {
    34         this.id = id;
    35     }
    36     public void setName(String name) {
    37         this.name = name;
    38     }
    39 
    40 }

    Junit 測試 :

    1 @Test
    2     public void createTable(){
    3         
    4         new SchemaExport(new AnnotationConfiguration().configure()).create(truetrue);
    5     }

    執行上面的單元測試,數據庫中生成的表結構圖 :



    從上面的圖可以看出,多出了一張中間表,這張中間表是冗余的,它沒有必要存在,它之所以存在,這是因為 hibernate 在默認的情況下,

    會將 OneToMany 當成是 ManyToMany 的一種特殊情況,故而生成了一張中間表。想要去掉這張中間表只需要加上 @JoinColumn 注解即可 :

    1     @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    2     @JoinColumn(name = "farm_id")
    3     public Set<Plant> getPlantSet() {
    4         return plantSet;
    5     }

    再次執行單元測試 ( 注意要手動刪除之前生成的表,因為有中間表的存在,中間表參考了與它關聯的主表,這種情況下 hibernate 無法幫我們刪除表 )




    級聯保存 :

     1     private static Session session;
     2     
     3     @BeforeClass
     4     public static void beforeClass(){
     5         
     6         session = new AnnotationConfiguration().configure().buildSessionFactory().getCurrentSession();
     7     }
     8     
     9     @Test
    10     public void insert(){
    11         try {
    12             Plant tomato  = new Plant();
    13             tomato.setName("番茄");
    14             Plant cabbage = new Plant();
    15             cabbage.setName("卷心菜");
    16             Set<Plant> plantSet = new HashSet<Plant>();
    17             plantSet.add(tomato);
    18             plantSet.add(cabbage);
    19             Farm farm = new Farm();
    20             farm.setName("fancy-farm");
    21             farm.setPlantSet(plantSet);
    22             session.beginTransaction();
    23             session.persist(farm);
    24             session.getTransaction().commit();
    25         } catch (Exception e) {
    26             e.printStackTrace();
    27         }
    28     }



      
    posted on 2012-10-21 08:04 fancydeepin 閱讀(3964) 評論(1)  編輯  收藏

    評論:
    # re: hibernate annotation 之 一對多單向外鍵關聯 2013-07-07 19:45 | sendreams
    lz,你好,請教你文中圖片是用什么工具生成的?還望告知,謝謝!  回復  更多評論
      

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲国产精品一区第二页| 亚洲精品天堂成人片AV在线播放 | 婷婷久久久亚洲欧洲日产国码AV| 真人无码作爱免费视频| 国产免费爽爽视频免费可以看| 亚洲第一街区偷拍街拍| 国产成人无码区免费A∨视频网站 国产成人涩涩涩视频在线观看免费 | 四虎影在线永久免费观看| 亚洲av无码av在线播放| 国产精品四虎在线观看免费| 久久精品国产亚洲AV| 无码人妻一区二区三区免费n鬼沢 无码人妻一区二区三区免费看 | 亚洲av片一区二区三区| 亚洲免费在线视频播放| 最近中文字幕mv免费高清在线| 亚洲三级电影网址| 黄色片在线免费观看| 亚洲免费人成视频观看| 成年人免费观看视频网站| 亚洲av无码有乱码在线观看| 国产在线98福利播放视频免费| 黄色a三级三级三级免费看| 免费在线观看中文字幕| 亚欧洲精品在线视频免费观看 | 亚洲免费视频播放| 国产大片线上免费看| 久久久久免费视频| 亚洲欧洲精品久久| 国产美女精品久久久久久久免费| 一区二区三区AV高清免费波多| 亚洲VA中文字幕无码一二三区| 四虎成年永久免费网站 | 亚洲影视一区二区| 国产精品免费视频网站| 两性色午夜视频免费播放| 亚洲国产精品综合久久一线 | 一本色道久久88—综合亚洲精品 | 久久精品国产亚洲AV麻豆不卡| 免费精品国产自产拍在| 免费国产高清毛不卡片基地| 久久久久亚洲精品影视|