8.1 Hibernate:一对一关联映射

一对一关联映射(@OneToOne)既可以是单向关联,也可以是双向关联。

单向关联遵循关系型数据库外键语义。

单向关联由外键所在表映射对象维护级联关系,双向关联使用 @OneToOnemappedBy 属性。

建立一对一应用场景

以手机为例,一部手机包含非常多的属性,如:
IMEI(International Mobile Equipment Identity,国际移动设备身份码)、手机号、型号、厂商、操作系统、版本等等。

在某些应用场景下不需要取出手机全部信息,只需要部分关键信息,基于这种场景可以将手机信息分别存储于两张表中:

  • phone:存储手机关键信息,如 IMEI、手机号等

  • phone_detail:存储更多更详细的属性,如厂商、型号、操作系统等

使用 MySQL 数据库:

CREATE TABLE `test`.`phone` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增长主键',
  `imei` VARCHAR(15) NOT NULL,
  `number` VARCHAR(11) NOT NULL COMMENT '手机号',
  PRIMARY KEY (`id`),
  UNIQUE INDEX `id_UNIQUE` (`id` ASC),
  UNIQUE INDEX `imei_UNIQUE` (`imei` ASC),
  UNIQUE INDEX `number_UNIQUE` (`number` ASC))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COMMENT = '存放手机关键信息';
CREATE TABLE `test`.`phone_detail` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增长主键',
  `phone_id` INT UNSIGNED NOT NULL COMMENT '关联phone表的外键',
  `manufacturer` VARCHAR(64) NULL COMMENT '制造商',
  `model` VARCHAR(64) NULL COMMENT '型号',
  PRIMARY KEY (`id`),
  UNIQUE INDEX `id_UNIQUE` (`id` ASC),
  INDEX `FK_PHONE_DETAIL_idx` (`phone_id` ASC),
  CONSTRAINT `FK_PHONE_DETAIL`
    FOREIGN KEY (`phone_id`)
    REFERENCES `test`.`phone` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COMMENT = '存放更多的手机详细信息';

8.1.1 Hibernate:一对一单向关联(unidirectional)

8.1.2 Hibernate:一对一双向关联(bidirectional)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

又言又语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值