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



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

@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发送到Microsoft Sqlserver时,JPA如下:

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

则将使用myModel_ name_。

当一个查询将由Spring Data发送到Microsoft Sqlserver时,JPA如下:

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。

最新更新