@JoinColumn解釋


@JoinColumn與@Column標記一樣,是用於注釋表中的字段的。它的屬性與@Column屬性有很多相同之處,這里就不詳細講述。請讀者參閱5.2.2小節中有關@Column屬性的部分。 

l         @JoinColumn與@Column相區別的是:@JoinColumn注釋的是保存表與表之間關系的字段,它要標注在實體屬性上。而@Column標注的是表中不包含表關系的字段。 

l         與@Column標記一樣,name屬性是用來標識表中所對應的字段的名稱。例如customer表中存在字段addr_id,標識的代碼如下所示。 

@OneToOne 

@JoinColumn(name = "addr_id") 

public AddressEO getAddress() { 

         return address; 



若此時,不設置name的值,則在默認情況下,name的取值遵循以下規則: 

name=關聯表的名稱+“_”+ 關聯表主鍵的字段名 

例如,CustomerEO實體中,如果不指定name的值,默認將對應name=address_id;因為@JoinColumn注釋在實體 AddressEO屬性上,實體AddressEO對應的表名為“address”;表address的主鍵是“id”,所以此時對應的默認的字段名稱為 “address_id”。 


提示:此規則只適用於與@OneToOne標記同時使用時。若與@ManyToOne或@ManyToMany標記同時使用時,將遵循其他的規則。 

l         默認情況下,關聯的實體的主鍵一般是用來做外鍵的。但如果此時不想主鍵作為外鍵,則需要設置referencedColumnName屬性。例如,將address表中增加一個字段“ref_id”,address表的建表SQL變為以下所示。 

CREATE TABLE address ( 

id int(20) NOT NULL auto_increment, 

ref_id int int(20) NOT NULL, 

province varchar(50) , 

city varchar(50) , 

postcode varchar(50) , 

detail varchar(50) , 

PRIMARY KEY (id) 



此時,通過customer表中的“address_id”字段關聯的是address表中的“ref_id”,而“ref_id”並不是address表中的主鍵,則實體中標注如代碼下所示。 

@OneToOne 

@JoinColumn(name = "address_id",referencedColumnName="ref_id") 

public AddressEO getAddress() { 

         return address; 




屬性referencedColumnName標注的是所關聯表中的字段名,若不指定則使用的所關聯表的主鍵字段名作為外鍵。 

l         JoinColumn標記不僅能夠與@OneToOne使用,也可以@ManyToOne或@ManyToMany標記同時使用,它們所表示的含義不同,這些內容將在下文詳細講述。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM