8.1 Hibernate:一对一关联映射
程序员文章站
2022-04-16 08:53:01
...
一对一关联映射(@OneToOne
)既可以是单向关联,也可以是双向关联。
单向关联遵循关系型数据库外键语义。
单向关联由外键所在表映射对象维护级联关系,双向关联使用 @OneToOne
的 mappedBy
属性。
建立一对一应用场景
以手机为例,一部手机包含非常多的属性,如:
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)
上一篇: Hibernate 一对一关联映射
下一篇: 解决tomcat内存溢出