小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

@JoinColumn

 wayne_liberary 2014-08-06
@OneToOne注釋只能確定實(shí)體與實(shí)體的關(guān)系是一對(duì)一的關(guān)系,不能指定數(shù)據(jù)庫表中的保存的關(guān)聯(lián)字段。所以此時(shí)要結(jié)合@JoinColumn標(biāo)記來指定保存實(shí)體關(guān)系的配置。

@JoinColumn與本書上一章講述的@Column注釋類似,它的定義如下代碼所示。

@Target({METHOD, FIELD}) @Retention(RUNTIME)

public @interface JoinColumn {

String name() default "";

String referencedColumnName() default "";

boolean unique() default false;

boolean nullable() default true;

boolean insertable() default true;

boolean updatable() default true;

String columnDefinition() default "";

String table() default "";

}

在使用@JoinColumn注釋時(shí),應(yīng)注意以下幾個(gè)問題。

l         @JoinColumn與@Column標(biāo)記一樣,是用于注釋表中的字段的。它的屬性與@Column屬性有很多相同之處,這里就不詳細(xì)講述。請(qǐng)讀者參閱5.2.2小節(jié)中有關(guān)@Column屬性的部分。

l         @JoinColumn與@Column相區(qū)別的是:@JoinColumn注釋的是保存表與表之間關(guān)系的字段,它要標(biāo)注在實(shí)體屬性上。而@Column標(biāo)注的是表中不包含表關(guān)系的字段。

l         與@Column標(biāo)記一樣,name屬性是用來標(biāo)識(shí)表中所對(duì)應(yīng)的字段的名稱。例如customer表中存在字段addr_id,標(biāo)識(shí)的代碼如下所示。

@OneToOne

@JoinColumn(name = "addr_id")

public AddressEO getAddress() {

         return address;

}

若此時(shí),不設(shè)置name的值,則在默認(rèn)情況下,name的取值遵循以下規(guī)則:

name=關(guān)聯(lián)表的名稱+“_”+ 關(guān)聯(lián)表主鍵的字段名

例如,CustomerEO實(shí)體中,如果不指定name的值,默認(rèn)將對(duì)應(yīng)name=address_id;因?yàn)锧JoinColumn注釋在實(shí)體 AddressEO屬性上,實(shí)體AddressEO對(duì)應(yīng)的表名為“address”;表address的主鍵是“id”,所以此時(shí)對(duì)應(yīng)的默認(rèn)的字段名稱為 “address_id”。


提示:此規(guī)則只適用于與@OneToOne標(biāo)記同時(shí)使用時(shí)。若與@ManyToOne或@ManyToMany標(biāo)記同時(shí)使用時(shí),將遵循其他的規(guī)則。

l         默認(rèn)情況下,關(guān)聯(lián)的實(shí)體的主鍵一般是用來做外鍵的。但如果此時(shí)不想主鍵作為外鍵,則需要設(shè)置referencedColumnName屬性。例如,將address表中增加一個(gè)字段“ref_id”,address表的建表SQL變?yōu)橐韵滤尽?

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)

)

此時(shí),通過customer表中的“address_id”字段關(guān)聯(lián)的是address表中的“ref_id”,而“ref_id”并不是address表中的主鍵,則實(shí)體中標(biāo)注如代碼下所示。

@OneToOne

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

public AddressEO getAddress() {

         return address;

}


屬性referencedColumnName標(biāo)注的是所關(guān)聯(lián)表中的字段名,若不指定則使用的所關(guān)聯(lián)表的主鍵字段名作為外鍵。

l         JoinColumn標(biāo)記不僅能夠與@OneToOne使用,也可以@ManyToOne或@ManyToMany標(biāo)記同時(shí)使用,它們所表示的含義不同,這些內(nèi)容將在下文詳細(xì)講述。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多