知识点梳理:
OneToOne分为主从关系, 也就是存在主要端才会产生从一方, 例如一下例子: qq 和 qq空间的关系, 只要存在QQ才会产生QQ空间。
1、建表
# 主
CREATE TABLE `qq` (
`id` int(11) NOT NULL,
`name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
# 从
CREATE TABLE `qq_zone` (
`id` int(11) NOT NULL,
`name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`qq_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `UK_n2m2x0tb7v6l2rsn6a4cvs13r` (`qq_id`),
CONSTRAINT `FKf3utsqawsabdqikdrqe7c2sh8` FOREIGN KEY (`qq_id`) REFERENCES `qq` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
2、实体映射
QQ:
@Entity
@Table
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class QQ {
@Id
@GeneratedValue
private Integer id;
private String name;
@OneToOne(mappedBy = "qq", cascade = CascadeType.PERSIST) // zone_id不能为空
private QqZone zone;
@Override
public String toString() {
return "{id:"+getId()+",name:"+getName()+"}";
}
}
QQ空间
@Entity
@Table
@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class QqZone {
@Id
@GeneratedValue
private Integer id;
private String name;
@OneToOne(optional = false)
@JoinColumn(name = "qq_id", unique = true)
private QQ qq;
@Override
public String toString() {
return "{id:"+getId()+",name:"+getName()+"}";
}
}