从零开始 Spring Boot 60:一个实体映射到多个表

本文探讨了如何使用Spring Boot和Hibernate将一个实体映射到多个表,以解决性能问题。通过@SecondaryTable和@SecondaryTables注解,可以将实体的某些字段拆分到副表中,而保持原有的访问方式不变。这种方式提供了数据表拆分的灵活性,同时保持了编程接口的简洁性。
摘要由CSDN通过智能技术生成

从零开始 Spring Boot 60:一个实体映射到多个表

spring boot

图源:简书 (jianshu.com)

在之前的文章中我们讨论了 JPA 中的一对一关系,实际上存在一种特殊的一对一关系,即将一个实体映射到多张表,本文会讨论这种关系。

我之前提过,有时候会因为性能上的考量将一张表拆分成多张表,虽然拆分后也可以用一对一关系来表示和实现,但这样并不是特别合适,因为一对一关系中一边的关系是可以为null的,比如说一个学生对应一个电子邮件地址,也可能有的学生没有电子邮件地址,此时email表可能就没有一条对应的数据。但如果是从同一张表上拆分出的两张表,必然存在一对一的关系,即使另一张表中的数据都是null字段。

下面我们将说明如何实现这种关系。

示例

假设我们有一张表,保存学生的所有信息,这个表可以用下面的实体类表示:

@Entity
@Table(name = "student")
public class Student {
   
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @NotNull
    @NotBlank
    @Length(max = 45)
    private String name;
    @NotNull
    private Boolean loveMusic = false;
    @NotNull
    private Boolean loveDraw = false;
    private String address;
    private String email;
}

Hibernate 生成的表结构如下:

CREATE TABLE `student` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `name` varchar(45) NOT NULL,
  `address` varchar(255) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  `love_draw` bit(1) NOT NULL,
  `love_music` bit(1) NOT NULL,
  PRIMARY KEY (`id	
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值