瘋狂

          STANDING ON THE SHOULDERS OF GIANTS
          posts - 481, comments - 486, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          hibernate annoation (八 關聯映射)

          Posted on 2009-11-02 14:54 瘋狂 閱讀(378) 評論(0)  編輯  收藏 所屬分類: hibernate

          onetoone:單向

          1,主鍵關聯:

           在關聯放使用@OneToOne

          sql語句:(類代碼見同前面的代碼)

          Java代碼
          1. create table A (id integer not null auto_increment, aname varchar(255), b_id integer, primary key (id))   
          2. create table B (id integer not null auto_increment, bname varchar(255), primary key (id))   
          3. alter table A add index FK41FCD34905 (b_id), add constraint FK41FCD34905 foreign key (b_id) references B (id)  

          可以使用@PrimaryKeyJoinColumn進行關聯

          2 雙向:

          在關聯方使用 

          @OneToOne(cascade=CascadeType.ALL)
          @JoinColumn(name="b")

          被關聯方使用

          @OneToOne(mappedBy="b")

          最終sql:

          Java代碼
          1. create table A (id integer not null auto_increment, aname varchar(255), b integer, primary key (id))   
          2. create table B (id integer not null auto_increment, bname varchar(255), primary key (id))   
          3. alter table A add index FK41FCA54B4F (b), add constraint FK41FCA54B4F foreign key (b) references B (id)  

          如果不寫

          @OneToOne(mappedBy="b")則會在被關聯放也生成一個字段

          最終代碼:

          Java代碼
          1. create table A (id integer not null auto_increment, aname varchar(255), i_id integer, primary key (id))   
          2. create table B (id integer not null auto_increment, bname varchar(255), a_id integer, primary key (id))   
          3. alter table A add index FK41FCD6779E (i_id), add constraint FK41FCD6779E foreign key (i_id) references B (id)   
          4. alter table B add index FK42FCD2D4A5 (a_id), add constraint FK42FCD2D4A5 foreign key (a_id) references A (id)  

           

           

            如果沒有寫@JoinColumn(name="b")則默認是關聯屬性名+下劃線+id

          最終sql:

           

          Java代碼
          1. create table A (id integer not null auto_increment, aname varchar(255), b_id integer, primary key (id))   
          2. create table B (id integer not null auto_increment, bname varchar(255), primary key (id))   
          3. alter table A add index FK41FCD34905 (b_id), add constraint FK41FCD34905 foreign key (b_id) references B (id)  

           可以使用@JoinColumn(referencedColumnName="bname")讓主關聯方不關聯被關聯放的主鍵

          最終sql

          Java代碼 復制代碼
          1. create table A (id integer not null auto_increment, aname varchar(255), b_bname varchar(255), primary key (id))   
          2. create table B (id integer not null auto_increment, bname varchar(255), primary key (id), unique (bname))   
          3. alter table A add index FK41E47CD6BD (b_bname), add constraint FK41E47CD6BD foreign key (b_bname) references B (bname)  

            3 關聯表

           使用

          @OneToOne(cascade=CascadeType.ALL)
           @JoinTable(name="centert",joinColumns=@JoinColumn(name="aid"),inverseJoinColumns=@JoinColumn(name="bid"))

          最終sql:

          寫道
          create table A (id integer not null auto_increment, aname varchar(255), primary key (id))
          create table B (id integer not null auto_increment, bname varchar(255), primary key (id))
          create table centert (bid integer, aid integer not null, primary key (aid))
          alter table centert add index FK27A6BEBFFCA6C7EA (bid), add constraint FK27A6BEBFFCA6C7EA foreign key (bid) references B (id)
          alter table centert add index FK27A6BEBFFCA6C428 (aid), add constraint FK27A6BEBFFCA6C428 foreign key (aid) references A (id)

           

          manytoone

          和onetoone很相似

          特殊情況:果不寫:mappedBy這會產生中間表:

          Java代碼
          1. create table A (id integer not null auto_increment, aname varchar(255), i_id integer, primary key (id))   
          2. create table B (id integer not null auto_increment, bname varchar(255), primary key (id))   
          3. create table B_A (B_id integer not null, a_id integer not null, unique (a_id))   
          4. alter table A add index FK41FCD6779E (i_id), add constraint FK41FCD6779E foreign key (i_id) references B (id)   
          5. alter table B_A add index FK10384FCD34905 (B_id), add constraint FK10384FCD34905 foreign key (B_id) references B (id)   
          6. alter table B_A add index FK10384FCD2D4A5 (a_id), add constraint FK10384FCD2D4A5 foreign key (a_id) references A (id)  

           

           如

          targetEntity屬性可以關聯接口

          例如接口代碼

          Java代碼
          1. public interface I {   
          2.   
          3. }  

           class B implments I

          關聯方:

          Java代碼
          1. private I i;   
          2. @ManyToOne(targetEntity=B.class)   
          3.     public I getI() {   
          4.         return i;   
          5.     }  

           

          最終sql:

          Java代碼
          1. create table A (id integer not null auto_increment, aname varchar(255), i_id integer, primary key (id))   
          2. create table B (id integer not null auto_increment, bname varchar(255), primary key (id))   
          3. alter table A add index FK41FCD6779E (i_id), add constraint FK41FCD6779E foreign key (i_id) references B (id)  

           

          主站蜘蛛池模板: 尼勒克县| 肇东市| 贡山| 鸡东县| 新晃| 松溪县| 甘谷县| 高阳县| 沅陵县| 临桂县| 龙里县| 文昌市| 花莲县| 澳门| 丽水市| 桃园县| 同德县| 邮箱| 永靖县| 黎平县| 贵溪市| 佳木斯市| 涞源县| 新龙县| 嵊泗县| 墨竹工卡县| 天峨县| 海城市| 称多县| 建湖县| 惠东县| 油尖旺区| 武冈市| 延庆县| 蒙阴县| 博兴县| 汶川县| 江油市| 玉林市| 丰顺县| 湖南省|