首页 > 解决方案 > 在 spring 存储库中过滤实体

问题描述

是否可以将过滤器应用于带有注释的结果而不是扩展方法名称?

例如:

@Repository
public interface JobRepository extends JpaRepository<Job, Long> {
    List<Job> findAllByUserAndEnabledIsTrue(User u);
}

在这里我应用 filter 'enabled == true'。但是假设我们有很多方法。用扩展名称编写它们很不方便。我可以将此过滤器应用于整个存储库吗?

我发现 @FilterDef但我不知道如何使用以及 spring 是否支持这个注释。

标签: springhibernatespring-bootspring-data-jpaspring-data

解决方案


据我所知,Spring Data JPA 不依赖于 Hibernate,它可以与任何 JPA 实现一起使用。Hibernate@Filters不是 JPA 标准,所以简单的答案是否定的!Spring JPA 不支持@Filters。

但是您可以@Filter使用 AOP 应用 s,并且只需在存储库方法上应用方面。

@Query顺便说一句,我认为更好的解决方案是使用 Spring Data JPA 的注释进行手写查询。因为这样你可以根据上下文含义来命名方法,而不是根据它们的内部实现来命名。

例如,您可以命名您的方法findActiveJobsForUser,使其更有意义和可读性。


推荐阅读