基于内存过滤的Spring JPA



我们将Hibernate与JPA结合使用。

我们需要编写一个带有WHERE子句的@Query,如下所示:

*WHERE last_action LIKE '%deleted%' AND ACTIVE_INDICATOR='N'*

但是,如果我按原样编写此查询,它将进行全表扫描,并且需要很长时间才能完成(由于last_action上有通配符,索引将丢失(然而,由于数据的性质,我知道如果我只使用一个条件运行查询——WHERE ACTIVE_INDICATOR='N'——那么只会返回大约100行。在Java中,为last_action的剩余条件进行正则表达式匹配将是简单可行的。

是否可以在不编写额外包装器方法的情况下完成此操作?

  1. 您可以创建一个特殊的索引,该索引也适用于LIKE语句(如Postgres中的trigram索引(
  2. 您可以尝试更改条件的顺序(不确定Hibernate是否保留它,或者您必须编写一个本地SQL(,以便使用LIKE的是最后一个
  3. 或者,正如您所说的那样,在Java中手动过滤。我不认为这是一个自动机制。自己动手太容易了

如果您有最新的统计数据,那么您的数据库应该足够聪明,也能计算出这一点。也许您只需要刷新统计数据就可以获得良好的性能?

最新更新