【问题标题】:Is a Spring-data-jpa entity already indexed by the @EmbeddedId field?@EmbeddedId 字段是否已索引 Spring-data-jpa 实体?
【发布时间】:2019-11-25 03:56:54
【问题描述】:

我有以下spring-data-jpa 实体:

@Entity(name = "absenceDays")
@Table
public final class MyTable {

    @EmbeddedId
    private MyId myId;

    @Column(nullable = false)
    private Long anotherId;

}

此外,这是上面使用的@Embeddable 实体:

public final class MyId implements Serializable {

    @Column(updatable = false, nullable = false)
    private Long id;

    @Column(updatable = false, nullable = false)
    private LocalDate date;

 }

我有几个问题?

  1. 表是否已经用它们的主键索引了?它似乎是特定于实现的,如此处所述When should I use primary key or index?
  2. 如果我需要索引我的表,我应该如何使用 JPA 2.1 @Index 注释使用复合 id 索引我的表?

我选择的数据库是带有 MySQL InnoDB 方言的 AWS RDS。

【问题讨论】:

  • 为什么不检查生成的架构?在任何情况下:不要使用 JPA 模式生成来设置或维护您的生产数据库模式。使用专门用于此目的的工具,例如 Flyway 或 Liquibase。

标签: mysql indexing spring-data-jpa primary-key composite-key


【解决方案1】:

既然你标记了问题[mysql],我会从这个角度来解决它。

在 MySQL 中,PRIMARY KEY 始终是 UNIQUE 和一个 KEY(又名 INDEX)。在ENGINE=InnoDB 的情况下,它也与数据“聚集”在一起。考虑到 PK,这使得获取一行非常快。

要询问与 MySQL 相关的问题,最好在第 3 方界面(在您的情况下为 Spring)下方挖掘以获取 MySQL(或 MariaDB 或 Aurora)信息,例如 CREATE TABLESELECT...

我可能会用上述信息回答你的 Q2。

【讨论】:

    猜你喜欢
    • 2019-10-01
    • 2021-01-31
    • 1970-01-01
    • 2020-05-11
    • 2015-09-11
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 2018-12-14
    相关资源
    最近更新 更多