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

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

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

    千里冰封
    JAVA 濃香四溢
    posts - 151,comments - 2801,trackbacks - 0
    實體BEAN的七種關系之---------一對多單向
     One-to-Many Unidirectional Relationship

    一對多單向最典型的應用莫過于人和電話的關系了,我們一個人可以有很多個電話,有時候還經常會換號碼,我們可以既有小靈通也有手機,家里還有固定電話,這就是很典型的一對多關系,為什么要是單向的呢,因為電話的易變性,這個號碼可能今天是你的,明天就可能是別人的了,并且現在買手機號碼是不需要身份證的,所以從電話號碼是不可能查到你的身份證了.并且電話號碼也不應該和人綁定,一般我們都是問別人電話是多少,卻比較少去問一個號碼是誰的(這種情況也有,就是你收到陌生人的電話或短信的時候).那我們還是先看代碼吧.

    首先我們還是先要定義一個人的實體類
    /*
     * Person.java
     * 
     * Created on 2007-9-15, 0:11:58
     * 
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     
    */

    package lbf.entitybean.test1;

    import java.io.Serializable;
    import java.util.List;
    import javax.persistence.CascadeType;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.OneToMany;
    import javax.persistence.OneToOne;

    /**
     *
     * 
    @author Admin
     
    */
    @Entity
    public class Person implements Serializable {
        
    private IDCard idCard;
        
    private static final long serialVersionUID = 1L;
        
    private Long id;
        
    private String name;
        
    private String sex;
        
    private int age;
        
    private Address address;
        
        @OneToOne(cascade
    =CascadeType.ALL,optional=true)
        
    public Address getAddress() {
            
    return address;
        }

        
    public void setAddress(Address address) {
            
    this.address = address;
        }
        @OneToMany(cascade
    =CascadeType.ALL)
        @JoinColumn(name
    ="personID")
        
    public List<Phone> getPhones() {
            
    return phones;
        }

        
    public void setPhones(List<Phone> phones) {
            
    this.phones = phones;
        }
        
    private List<Phone> phones;
        
    public int getAge() {
            
    return age;
        }

        
    public void setAge(int age) {
            
    this.age = age;
        }

        
    public String getName() {
            
    return name;
        }

        
    public void setName(String name) {
            
    this.name = name;
        }

        
    public String getSex() {
            
    return sex;
        }

        
    public void setSex(String sex) {
            
    this.sex = sex;
        }
        
    public void setId(Long id) {
            
    this.id = id;
        }

        @Id
        @GeneratedValue(strategy 
    = GenerationType.AUTO)
        
    public Long getId() {
            
    return id;
        }

        @OneToOne(cascade
    ={CascadeType.ALL})
        
    public IDCard getIdCard() {
            
    return idCard;
        }

        
    public void setIdCard(IDCard iDCard) {
            
    this.idCard = iDCard;
        }


    }


    然后是電話的實體類

    /*
     * Phone.java
     * 
     * Created on 2007-9-18, 17:23:28
     * 
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     
    */

    package lbf.entitybean.test1;

    import java.io.Serializable;
    import javax.persistence.CascadeType;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.ManyToOne;

    /**
     *
     * 
    @author hadeslee
     
    */
    @Entity
    public class Phone implements Serializable {
        
    private static final long serialVersionUID = 1L;
        
    private Long id;
        
    private String phoneNumber;

        
    public String getPhoneNumber() {
            
    return phoneNumber;
        }

        
    public void setPhoneNumber(String phoneNumber) {
            
    this.phoneNumber = phoneNumber;
        }
        
    public void setId(Long id) {
            
    this.id = id;
        }

        @Id
        @GeneratedValue(strategy 
    = GenerationType.AUTO)
        
    public Long getId() {
            
    return id;
        }

    }

    我們可以在Person類里面發現如下注釋

     @OneToMany(cascade=CascadeType.ALL)
        @JoinColumn(name="personID")
        public List<Phone> getPhones() {
            return phones;
        }


    它代表是一對多,一是指類本身,多是指這個成員,也就是一個類可以對應多個成員.
    在一對多里面,無論是單向還是雙向,映射關系的維護端都是在多的那一方,也就是Phone那里,因為要在數據庫面表現的話,也只有讓Phone起一個指向Person的外鍵,不可能在Person里面指向Phone,這一點和一對一不一樣,一對一可以在任意一方起一個外鍵指向對方.可是一對多卻不行了.在這里@JoinColumn這個注釋指的卻是在Phone里面的外鍵的列的名字,它并不像在一對一里面的注釋指的是自己表里面的外鍵列名.這一點要特別注意一下.
    如果是一對多的雙向關系,那么這個注釋就要應用到多的那邊去了,雖然注釋還在Person類里面,但是它起的效果卻是在Phone里面起一個叫personID的外鍵, 因為多的那邊要有外鍵指向少的這邊.

    如果你不加    @JoinColumn(name="personID")這個注釋的話,那么JBOSS就會自動幫你生成一張中間表,它負現Person和Phone表之間的聯系.它將會做如下事情:
    CREATE TABLE PERSON_PHONE
    (
        PERSON_id 
    INT,
     PHONE_id 
    INT
    );
    ALTER TABLE PERSON_PHONE ADD CONSTRAINT person_phone_unique
       
    UNIQUE (PHONE_id);

    ALTER TABLE PERSON_PHONE ADD CONSTRAINT personREFphone
       
    FOREIGN KEY (PERSON_id) REFERENCES PERSON (id);

    ALTER TABLE PERSON_PHONE ADD CONSTRAINT personREFphone2
       
    FOREIGN KEY (PHONE_id) REFERENCES PHONE (id);

    所以我們最好還是指定一下,以讓程序產生更加確定的行為,不過一般是推薦另外生成一個中間表好一些,因為這樣的話,對原來兩張表的結構不對造成任何影響。在遺留系統的時候很多用,有些時候,一些表都是以前就建好了的,要改表的結構是不太可能的,所以這個時候中間的表就顯得很重要了,它可以在不侵入原來表的情況下構建出一種更清淅更易管理的關系。

    所以一對多的單向關聯,我們還是推薦使用一張中間表來建立關系。



    盡管千里冰封
    依然擁有晴空

    你我共同品味JAVA的濃香.
    posted on 2007-09-20 08:53 千里冰封 閱讀(1118) 評論(0)  編輯  收藏 所屬分類: JAVAEE
    主站蜘蛛池模板: 区三区激情福利综合中文字幕在线一区亚洲视频1 | 国产亚洲色婷婷久久99精品91| 亚洲国产精品日韩av不卡在线| 日韩国产免费一区二区三区| 亚洲精品美女在线观看| 2021精品国产品免费观看| 亚洲欧洲国产经精品香蕉网| 亚洲免费福利视频| 国产精品亚洲综合五月天| 成年性午夜免费视频网站不卡| 亚洲国产日韩精品| 免费国内精品久久久久影院| 黄色免费网址在线观看| 亚洲视频在线免费| 免费av一区二区三区| 精品亚洲成a人片在线观看| 国产精品1024永久免费视频 | 欧亚一级毛片免费看| 久久影视综合亚洲| 日韩免费电影网址| 亚洲AV无码专区在线亚| 亚洲va中文字幕无码久久| 很黄很污的网站免费| 亚洲免费视频观看| 国产又大又黑又粗免费视频| av片在线观看永久免费| 日本亚洲欧洲免费天堂午夜看片女人员 | 在线视频精品免费| 国产精品亚洲av色欲三区| 红杏亚洲影院一区二区三区| 日日麻批免费40分钟无码| 亚洲欧美日韩一区二区三区在线| 免费人妻av无码专区| 国产成人久久AV免费| 亚洲 欧洲 视频 伦小说| 亚洲精品国产高清不卡在线| 欧洲精品99毛片免费高清观看| 亚洲欧美乱色情图片| 亚洲日韩精品无码专区网址| 免费下载成人电影| 国产99久久久久久免费看|