hibernate - 如何在 JPA 实体中定义非聚集索引 include 子句

标签 hibernate jpa indexing include entity

我有一个实体,如下所示:

@Entity
@Table(indexes = {
        @Index(name = "myModel_name_index", columnList = "name")
})
public class MyModel implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
    private boolean active;
    @Column(unique = true,nullable = false)
    private String value;
    @Column(nullable = false)
    private String name;
    private String description;
    private BigDecimal price;
}

当 Spring Data JPA 将查询发送到 Microsoft Sqlserver 时,如下所示:

select count(*) from myModell where name='anything';

然后将使用 myModel_name_index。

当 Spring Data JPA 将查询发送到 Microsoft Sqlserver 时,如下所示:

select name, active, description,price from myModell where name='anything';

那么 myModel_name_index 将不会被使用!

解释计划结果告诉我,索引应该创建为

create nonclustered index myModel_name_index on myModell(name) include(active, description,price)

我的问题:如何在实体上定义 Include 子句?可以使用哪种解决方案?

最佳答案

这是不可能的,而且您也不应该依赖 JPA/Hibernate 进行模式管理。使用 Liquibase 或 Flyway 等工具来管理您的架构,它们都允许您完全控制 DDL。

关于hibernate - 如何在 JPA 实体中定义非聚集索引 include 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73714653/

相关文章:

java - Hibernate中@Synchronize有什么用

java - 使用 MySQL 的 DataJpaTest 存储库测试,Hibernate 不会将用户设置为在 H2 DB 中自动递增

数组上的 PostgreSQL GIN 索引

python - 如何将行索引更改回 pandas 数据框中的列?

java - WLS 10.3.4 - 在范围 xxx_EJB.jar 中没有名为 'xxx' 的持久性单元可用。可用持久化单元 : []

sql - 表上的索引策略

java - 当我的连接被管理禁用时提交的事务

hibernate - 当@Transactional 处于类级别时如何使用只读

java - 在 JPA 环境中声明 Hibernate 事件监听器

java - 自动提交 OpenJPA 写入