<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 千里冰封 閱讀(1117) 評論(0)  編輯  收藏 所屬分類: JAVAEE
    主站蜘蛛池模板: 亚洲精品无AMM毛片| 国产成人精品日本亚洲网站| 亚洲三级在线播放| 亚洲精品免费在线观看| 亚洲AV乱码久久精品蜜桃| 免费a级毛片永久免费| 亚洲AV无码不卡无码| 中文字幕手机在线免费看电影 | 在线精品亚洲一区二区小说| 日本激情猛烈在线看免费观看 | 免费视频专区一国产盗摄| 亚洲黄色免费在线观看| 麻花传媒剧在线mv免费观看| 亚洲成AV人综合在线观看| 一色屋成人免费精品网站 | 男人j进女人p免费视频| 亚洲中文无韩国r级电影| 野花香在线视频免费观看大全| 亚洲av无码一区二区三区网站| 中文字幕免费高清视频| 在线观看亚洲AV每日更新无码| 免费看美女让人桶尿口| 窝窝影视午夜看片免费| 亚洲国产女人aaa毛片在线| 97热久久免费频精品99| 亚洲AV无码专区电影在线观看| 91视频免费网址| 亚洲av最新在线观看网址| 亚洲一级特黄大片无码毛片| 免费无码成人AV在线播放不卡| www.亚洲成在线| 国产L精品国产亚洲区久久| 蜜桃成人无码区免费视频网站 | aaa毛片视频免费观看| 亚洲综合一区二区国产精品| 毛片a级毛片免费观看免下载| 日韩一级片免费观看| 亚洲香蕉免费有线视频| 可以免费观看一级毛片黄a| 在线毛片片免费观看| 亚洲爆乳少妇无码激情|