posts - 0, comments - 77, trackbacks - 0, articles - 356
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          EJB學習日記(9)

          Posted on 2007-09-27 14:23 semovy 閱讀(183) 評論(0)  編輯  收藏 所屬分類: EJB

          實體BEAN的七種關系之---------一對一雙向
          One-to-One Bidirectional Relationship

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

          先定義一個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;
              }
              

          }

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

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

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

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

          我們也可以看到在Person里面IDCard是注釋是optional=true,也就是說一個人是可以沒有身份證的,但是一個身份證不可以沒有人,所以在IDCard里面注釋person的時候,optional就為false了,這樣就可以防止一個空的身份證記錄進數據庫.
          主站蜘蛛池模板: 循化| 积石山| 鄂伦春自治旗| 蓬溪县| 休宁县| 尼玛县| 石柱| 固镇县| 湖北省| 岳池县| 凤山县| 永寿县| 年辖:市辖区| 资中县| 浦县| 大庆市| 沾益县| 建德市| 威远县| 汽车| 苍南县| 沅江市| 依兰县| 水富县| 海伦市| 武汉市| 临高县| 沙雅县| 涿鹿县| 阿拉善右旗| 和平县| 额敏县| 博客| 汪清县| 濉溪县| 东丰县| 墨江| 普安县| 随州市| 彭泽县| 永嘉县|