6.2.5 主键关联@PrimaryKeyJoinColumn

本文介绍了一对一关系数据库表设计中的主键关联策略,通过示例展示了如何使用主键进行表间关联,并解释了@PrimaryKeyJoinColumn注解的用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于一对一关系的表,还可以使用另一种策略来保存表与表之间的关系,这就是主键关联。主键关联是通过两个表中的主键来关联,下面举个具体的例子来说明。

例如同样是customer表和address表,表结构修改后SQL语句如下所示。

--客户表

CREATE TABLE  customer (

  id int(20) NOT NULL auto_increment,

  name varchar(100)  ,

  PRIMARY KEY  (id)

)

--地址表

CREATE TABLE  address (

  id int(20) NOT NULL auto_increment,

  province varchar(50)  ,

  city varchar(50) ,

  postcode varchar(50) ,

  detail varchar(50) ,

  PRIMARY KEY  (id)

)

这样表结构修改后,两个表之间的关联通过主键来关联,如图所示。

此时,CustomerEO中映射的配置的代码如下所示。

@Entity

@Table(name = "customer")

public class CustomerEO implements java.io.Serializable {

 

         ……

private AddressEO address;

 

         @OneToOne(cascade = { CascadeType.ALL })

         @PrimaryKeyJoinColumn

         public AddressEO getAddress() {

                   return address;

         }

 

         public void setAddress(AddressEO address) {

                   this.address = address;

         }

 

AddressEOCustomerEO双向关联,则应该修改AddressEO的代码如下:

@Entity

@Table(name = "address")

public class AddressEO implements java.io.Serializable {

        

         ……

         private CustomerEO customer;

 

         @OneToOne

         @PrimaryKeyJoinColumn

         public CustomerEO getCustomer() {

                   return customer;

         }

 

         public void setCustomer(CustomerEO customer) {

                   this.customer = customer;

         }

 

}

两个实体通过主键关联要使用@PrimaryKeyJoinColumn注释,它的定义如下代码所示。

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

public @interface PrimaryKeyJoinColumn {

String name() default "";

String referencedColumnName() default "";

String columnDefinition() default "";

}

它的属性与@JoinColumn属性类似,说明如下。

l         name属性标识所在实体的表中关联字段的名称。

l         referencedColumnName属性标识为所关联的的表中字段名称。

提示:@PrimaryKeyJoinColumn不仅可以与@OneToOne注释使用,还可以与其他标记同时使用,但所表示的含义不同,这些内容将在下文讲述。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值