`
java_true
  • 浏览: 110990 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

@JoinColumn

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

分享到:
评论

相关推荐

    Hibernate_Annotation关联映射

    上面的例子是指Trousers通过Trousers的外键列zip_id和TrousersZip关联,@JoinColumn批注定义了联接列,该批注和@Column批注有点类似,但是多了一个名为referencedColumnName的参数。该参数定义了所关联目标实体中的...

    Hibernate注解 关联关系映射注解.docx

    因为@JoinColumn注解表示其所注解的属性将来通过set方法设值后,会与DB中哪个字段相关联。 mappedBy属性表示当前注解的关联属性放弃了维护权,即使执行了set方法将值设置入,其也不会写入到DB中。 也正因为放弃了...

    Hibernate注释大全收藏

    @AssociationOverride( name="id.channel", joinColumns = @JoinColumn(name="chan_id") ) public class TvMagazin { @EmbeddedId public TvMagazinPk id; @Temporal(TemporalType.TIME) Date time; } @...

    Hibernate注解

    * @JoinColumn(name="主表外键") //这里指定的是数据库中的外键字段。 * public 从表类 get从表类(){return 从表类} * 从表:@OneToOne(mappedBy = "主表类中的从表属性")//例主表User中有一个从表属性是Heart类型的...

    JPA 标注 JPA标签手册

    o @JoinColumn o @JoinColumns o @JoinTable • L o @Lob • M o @ManyToMany o @ManyToOne o @MapKey o @MappedSuperclass • N o @NamedNativeQueries o @NamedNativeQuery o @NamedQueries o @NamedQuery • O o ...

    hibernate_UD

    请测试代码并查看测试,我建议您@JoinColumn批注,并将mappedBy放在报告的另一侧。 也可以使用@JoinTable批注完成此@JoinTable 。 @JoinTable批注指示关系的所有者-相应的表包含所引用表的外键列。 @Entity ...

    BOS 技术整理

    @OneToMany(mappedBy 相当于 inverse ) @ManyToOne 结合 @JoinColumn 添加一列外键 @ManyToMany 一方写 mappedBy 放弃外键维护、另一方 @JoinTable 维护中间表 收派标准修添加能实现 html 请求 后台...

    JPA例子(里面有一对一,一对多的例子)

    @JoinColumn(name = "personid", unique = false, nullable = true, insertable = true, updatable = true) public Person getPerson() { return this.person; } public void setPerson(Person person) { ...

    Java EE常用框架.xmind

    1,@JoinColumn注释是保存表与表之间关系的字段 2,如果不设置name,默认name = 关联表的名称+”-“+关联表主键的字段名 需要注意的问题: 注解写在get方法上 如果写在属性上可能会出现: Could not ...

    Java_EE_Udemy39:级联和传播持久性和删除操作

    Java_EE_Udemy39 ... @JoinColumn(name= "airplane_fk") private Airplane airplaneDetail; 现在,这可以使排期列表自动更新。 这也意味着,如果将飞行员添加到航班中,并且航班被删除,则飞行员现在也将被删除。

    JPA帮助文档

    奉上完整的JPA注解帮助文档

    symbok-bundle:Symfony注释包

    Symbok注释包 Symfony的运行时代码生成器包。 检测使用Symbok批注的类,生成相关方法并加载生成的类,而不是原始类。 将生成的类存储在Symfony缓存中,以便Symbok只...Symbok还解析了诸如Column , JoinColumn , O

    Symfony2联合查询实现方法

    本文实例讲述了Symfony2联合查询实现方法。分享给大家供大家参考,具体如下: 1.yml文件 Acme\MspadminBundle\... joinColumn: name: channel_id referencedColumnName: channel_id User: targetEntity: MspU

    javax.persistence.jar

    javax.persistence.JoinColumn.class javax.persistence.JoinColumns.class javax.persistence.JoinTable.class javax.persistence.Lob.class javax.persistence.LockModeType.class javax.persistence....

Global site tag (gtag.js) - Google Analytics