zoukankan      html  css  js  c++  java
  • @JoinColumn

    @OneToOne注释只能确定实体与实体的关系是一对一的关系,不能指定数据库表中的保存的关联字段。所以此时要结合@JoinColumn标记来指定保存实体关系的配置。 

    @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注释时,应注意以下几个问题。 

    l         @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标记同时使用,它们所表示的含义不同,这些内容将在下文详细讲述。

  • 相关阅读:
    luogu P1330 封锁阳光大学 x
    luoguP3353 在你窗外闪耀的星星
    luogu小金明qwq x
    [HDOJ5093] Battle ships(最大匹配)
    [HDOJ5092] Seam Carving(DP,记录路径)
    [UVA1449] Dominating Patterns(AC自动机,STL,计数,神坑)
    [POJ3057]Evacuation(二分图匹配,BFS,二分,好题)
    [POJ3041]Asteroids(二分图,最大匹配)
    [POJ2195]Going Home(带权最大匹配,KM,最小费用流)
    [codeVS1917] 深海机器人问题(费用流,拆边)
  • 原文地址:https://www.cnblogs.com/toSeeMyDream/p/5883012.html
Copyright © 2011-2022 走看看