使用crudRepository方法

时间:2017-04-21 09:15:43

标签: hibernate maven jpa spring-boot indexing

目前,我的项目运行良好,但我需要为查询使用索引来加速数据库中的数据检索。

鉴于:

我的表格脚本:

create table tbl_my_table (
  cycle_date date not null,
  seq_no int not null,
  username varchar(50) not null,
  last_update_time datetime not null
)
go

alter table tbl_my_table add constraint tbl_my_tablePK primary key (cycle_date, seq_no )
go

create nonclustered index tbl_my_table_idx on tbl_my_table (cycle_date,username)
go

我的实体类:

@Entity
@Table(name = "tbl_my_table")
@IdClass(MyTablePK.class)
public class MyTable implements Serializable{

  private static final long serialVersionUID = 3419263311932213654L;

  @Id
  @Column(name = "cycle_date", nullable = false, columnDefinition="date")
  private Date cycleDate;

  @Id
  @Column(name = "seq_no", nullable = false, columnDefinition="smallint")
  private Integer seq_no ;

  @Column(name = "username", nullable = false, columnDefinition="varchar(50)")
  private String username;

  @Column(name="last_update_time", nullable = false, columnDefinition="datetime")
  private DateTime last_update_time;

   (with getters & setters, equals and hashcode, and toString methods)
}

我的存储库或DAO:

public interface MyTableDAO extends CrudRepository<MyTable, MyTablePK> {
    List<MyTable> findByCycleDateAndUsername(
            Date cycleDate, String username);
}

使用CrudRepository,我知道我不需要编写查询来检索一些记录。上面的方法findByCycleDateAndUsername被“神奇地”翻译成查询:“从MyTable中选择一个a.cycleDate =:cycleDate和a.username =:username”

问题:如何将索引tbl_my_table_idx应用于此方法findByCycleDateAndUsername(),以便它能够以更快的方式返回结果?

条件和限制:我正在开发一个java项目,在java6,spring-boot 1.3.5上运行,使用hibernate,sybase数据库,maven web应用程序。

p / s:请不要聊天,只是书面解决方案。 p / s / s:请不要建议我改变我的编程语言,框架或升级我的java版本。这是对我工作的限制。

1 个答案:

答案 0 :(得分:1)

你的意思是你想要强制索引吗? 比如SELECT * FROM Table WITH(INDEX(Index_Name))

如果没有,那么请不要担心: 魔法只是在生成查询,然后像db上的任何其他查询一样执行。

由db查询计划决定是否使用索引