<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的七種關(guān)系之---------一對一雙向
    One-to-One Bidirectional Relationship

    一對一雙向的情況其實在現(xiàn)實生活中也是挺常見的,最常見的就是人和身份證的關(guān)系了,我們每個人都有一個身份證(只要你年滿16歲,并且申請了),并且每個身份證都對應(yīng)一個人,我們可以根據(jù)一個人查到他的身份證號碼,也可以根據(jù)一個身份證號碼查到一個人的具體情況,(第一代身份證重碼的情況還是有的:(   ) .好了,閑話不多說,還是看看代碼吧.

    先定義一個Person類

    /*
     * 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.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;
        }
        
    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},optional=true)
        
    public IDCard getIdCard() {
            
    return idCard;
        }

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


    }


    IDCard類

    /*
     * IDCard.java
     * 
     * Created on 2007-9-18, 17:05:51
     * 
     * 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.OneToOne;

    /**
     *
     * 
    @author hadeslee
     
    */
    @Entity
    public class IDCard implements Serializable {
        
    private static final long serialVersionUID = 1L;
        
    private Long id;
        
    private Person person;
        
    private String cardNumber;
        
    public String getCardNumber() {
            
    return cardNumber;
        }

        
    public void setCardNumber(String cardNumber) {
            
    this.cardNumber = cardNumber;
        }
        @OneToOne(cascade
    =CascadeType.ALL,mappedBy="idCard",optional=false)
        
    public Person getPerson() {
            
    return person;
        }

        
    public void setPerson(Person person) {
            
    this.person = person;
        }
        
    public void setId(Long id) {
            
    this.id = id;
        }
        @Id
        @GeneratedValue(strategy 
    = GenerationType.AUTO)
        
    public Long getId() {
            
    return id;
        }
        

    }

    在這里我們可以看到一對一單向和一對一雙向其實差別也不是很大,無非就是在對方的類里面也定義了一個自己,這樣就互相都能找到對方了,在數(shù)據(jù)表的表現(xiàn)來看,和一對一單向是一模一樣的,都是從Person表里面起一個外鍵連到IDCard的主鍵.但是只有這種方法嗎?

    在Person類里面,定義的IDCard注釋是和Address一樣的,可是我們在IDCard里面定義的注釋卻和Person里面的不一樣:

    @OneToOne(cascade=CascadeType.ALL,mappedBy="idCard",optional=false)
        public Person getPerson() {
            return person;
        }
    多了一個mappedBy這個方法,它表示什么呢?它表示此表和Person的關(guān)系是定義在Person里面的idCard這個成員上面的,它表示此表是一對一關(guān)系中的從表,也就是關(guān)系是在person表里面維護的,這一點很重要.

    我們也可以讓主導(dǎo)權(quán)在IDCard上面,也就是讓它產(chǎn)生一個指向Person的外鍵,這也是可以的,但是最好是讓 Person來維護整個關(guān)系,這樣更符合我們正常的思維.

    我們也可以看到在Person里面IDCard是注釋是optional=true,也就是說一個人是可以沒有身份證的,但是一個身份證不可以沒有人,所以在IDCard里面注釋person的時候,optional就為false了,這樣就可以防止一個空的身份證記錄進數(shù)據(jù)庫.



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

    你我共同品味JAVA的濃香.
    posted on 2007-09-19 10:50 千里冰封 閱讀(1010) 評論(1)  編輯  收藏 所屬分類: JAVAEE

    FeedBack:
    # re: EJB學(xué)習(xí)日記(9)
    2007-09-19 11:15 | java2java
    學(xué)到不少好東東  回復(fù)  更多評論
      
    主站蜘蛛池模板: 国产高清不卡免费在线| 久久影院亚洲一区| 特级毛片免费播放| 国产亚洲精久久久久久无码| 84pao国产成视频免费播放| 亚洲精品人成网线在线播放va| 亚洲国产一成久久精品国产成人综合| 国产精品免费看久久久| 中文有码亚洲制服av片| 国产偷窥女洗浴在线观看亚洲 | 成人福利在线观看免费视频| 亚洲Av综合色区无码专区桃色 | 成人一区二区免费视频| 亚洲一区二区三区免费在线观看| 亚洲国产一级在线观看| 91精品国产免费| 成人免费夜片在线观看| 亚洲国产亚洲综合在线尤物| 久久久青草青青国产亚洲免观| 精品香蕉在线观看免费| aa级女人大片喷水视频免费| 亚洲综合伊人制服丝袜美腿| 亚洲精品一品区二品区三品区| 在线a毛片免费视频观看| 精品一卡2卡三卡4卡免费视频| 亚洲AV无码一区二区三区性色| 亚洲福利在线视频| 亚洲区日韩区无码区| 免费精品国产自产拍在线观看图片| 精品一区二区三区免费观看| 亚洲а∨天堂久久精品9966| 亚洲avav天堂av在线不卡| 亚洲精品乱码久久久久久蜜桃| a级毛片无码免费真人| 久久精品电影免费动漫| 一级黄色免费毛片| 爱爱帝国亚洲一区二区三区| 亚洲一级毛片免费观看| 亚洲成色在线影院| 亚洲成AV人在线播放无码| 亚洲免费视频一区二区三区|