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

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

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

    java技術

    hibernate spring struts

    BlogJava 聯系 聚合 管理
      18 Posts :: 0 Stories :: 1 Comments :: 0 Trackbacks

    一對一(One-To-One)
    使用@OneToOne注解建立實體Bean之間的一對一關聯。一對一關聯有三種情況:(1).關聯的實體都共享同樣的主鍵,(2).其中一個實體通過外鍵關聯到另一個實體的主鍵(注意要模擬一對一關聯必須在外鍵列上添加唯一約束),(3).通過關聯表來保存兩個實體之間的連接關系(要模擬一對一關聯必須在每一個外鍵上添加唯一約束)。
    1.共享主鍵的一對一關聯映射:
    @Entity
    @Table(name="Test_Body")
    public class Body {
       private Integer id;
       private Heart heart;
      
       @Id
       public Integer getId() {
          return id;
       }
      
       public void setId(Integer id) {
          this.id = id;
       }

       @OneToOne
       @PrimaryKeyJoinColumn
       public Heart getHeart() {
          return heart;
       }

       public void setHeart(Heart heart) {
          this.heart = heart;
       }
    }

    @Entity
    @Table(name="Test_Heart")
    public class Heart {
       private Integer id;
       @Id
       public Integer getId() {
          return id;
       }

       public void setId(Integer id) {
          this.id = id;
       }
    }

    通過@PrimaryKeyJoinColumn批注定義了一對一關聯

    2.使用外鍵進行實體一對一關聯:
    @Entity
    @Table(name="Test_Trousers")
    public class Trousers {
       @Id
       public Integer id;
       @OneToOne
       @JoinColumn(name = "zip_id")
       public TrousersZip zip;
    }

    @Entity
    @Table(name="Test_TrousersZip")
    public class TrousersZip {
       @Id
       public Integer id;
       @OneToOne(mappedBy = "zip")
       public Trousers trousers;
    }

    上面的例子是指Trousers通過Trousers的外鍵列zip_id和TrousersZip關聯,@JoinColumn批注定義了聯接列,該批注和@Column批注有點類似,但是多了一個名為referencedColumnName的參數。該參數定義了所關聯目標實體中的聯接列,注意,當referencedColumnName關聯到非主鍵列的時候,關聯的目標類必須實現Serializable,還要注意的是所映像的屬性對應單個列(否則映射無效)
    一對一關聯可能是雙向的,在雙向關聯中,有且僅有一端作為主體(owner)端存在:主體端負責維護聯接列(即更新),對于不需要維護這種關系的從表則通過mappedNy屬性進行聲明。mappedBy的值指向主體的關聯屬性。例子中,mappedBy的值為zip。最后,不必也不能再在被關聯端(ownedside)定義聯接列了,因為已經在主體端聲明了。
    如果在主體沒有聲明@JoinColumn,系統自動進行處理:在主表(owner table)中將創建聯接列,列名為:主體的關聯屬性名+下劃線+被關聯端的主鍵列名。上面的例子中是zip_id,因為Trousers中的關聯屬性名為zip,TrousersZip的主鍵是id。

    3.通過關聯表定義一對一關聯
    @Entity
    @Table(name="Test_People")
    public class People {
       @Id
       public Integer id;
       @OneToOne
       @JoinTable(name ="TestPeoplePassports",
         joinColumns = @JoinColumn(name="perple_fk"),
         inverseJoinColumns = @JoinColumn(name="passport_fk")
       )
       public Passport passport;
    }

    @Entity
    @Table(name="Test_Passport")
    public class Passport {
       @Id
       public Integer id;
       @OneToOne(mappedBy = "passport")
       public People people;
    }
    People通過名為TestPeoplePassports的關聯表和Passport關聯。該關聯表擁有名為passport_fk的外鍵列,該外鍵指向Passport表,該信息定義為inverseJoinColoumns的屬性值,而people_fk外鍵列指向People表,該信息定義為joinColumns的屬性值。
    這種關聯可能是雙向的,在雙向關聯中,有且僅有一端作為主體(owner)端存在:主體端負責維護聯接列(即更新),對于不需要維護這種關系的從表則通過mappedNy屬性進行聲明。mappedBy的值指向主體的關聯屬性。例子中,mappedBy的值為passport。最后,不必也不能再在被關聯端(ownedside)定義聯接列了,因為已經在主體端聲明了。

    posted on 2009-11-05 15:32 just 閱讀(2204) 評論(0)  編輯  收藏

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


    網站導航:
     
    主站蜘蛛池模板: 亚洲?V乱码久久精品蜜桃| 成人免费毛片观看| 中文字幕一精品亚洲无线一区| 国产精品亚洲精品爽爽| 国产真人无遮挡作爱免费视频| 日韩在线视精品在亚洲| 伊在人亚洲香蕉精品区麻豆| 国产天堂亚洲国产碰碰| 亚洲精品99久久久久中文字幕| 国产无限免费观看黄网站| 亚洲人成影院在线无码按摩店| 成全在线观看免费观看大全| 亚洲一区二区在线免费观看| 国产h肉在线视频免费观看| 亚洲一区二区三区久久久久| 成人免费看吃奶视频网站| 午夜亚洲国产理论片二级港台二级| 国产成人免费全部网站| 人成电影网在线观看免费| 久久久久亚洲AV成人网人人网站 | 一个人看www在线高清免费看| 亚洲免费中文字幕| 日本黄色免费观看| 成人片黄网站色大片免费观看cn | 亚洲乱亚洲乱妇24p| 亚洲v国产v天堂a无码久久| 人人玩人人添人人澡免费| 亚洲剧场午夜在线观看| 亚洲AV蜜桃永久无码精品| 国产成人免费AV在线播放 | 成年女人男人免费视频播放| 边摸边脱吃奶边高潮视频免费| 亚洲精品乱码久久久久久蜜桃不卡| 猫咪免费人成网站在线观看| 精品亚洲成a人在线观看| 丝袜熟女国偷自产中文字幕亚洲| 久久免费看黄a级毛片| 狠狠热精品免费观看| 4444亚洲国产成人精品| 亚洲Aⅴ无码一区二区二三区软件 亚洲AⅤ视频一区二区三区 | 永久亚洲成a人片777777|