我有一个实体,如下所示:
@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/