spring存储库中的过滤实体

spring存储库中的过滤实体,spring,hibernate,spring-boot,spring-data-jpa,spring-data,Spring,Hibernate,Spring Boot,Spring Data Jpa,Spring Data,是否可以对带有注释的结果应用过滤器,而不是扩展方法名 例如: @Repository public interface JobRepository extends JpaRepository<Job, Long> { List<Job> findAllByUserAndEnabledIsTrue(User u); } @存储库 公共接口JobRepository扩展了JpaRepository{ 列出FindAllBySerandEnableDistriue(用

是否可以对带有注释的结果应用过滤器,而不是扩展方法名

例如:

@Repository
public interface JobRepository extends JpaRepository<Job, Long> {
    List<Job> findAllByUserAndEnabledIsTrue(User u);
}
@存储库
公共接口JobRepository扩展了JpaRepository{
列出FindAllBySerandEnableDistriue(用户u);
}
这里我应用过滤器
“enabled==true”
。但是假设我们有很多方法。用扩展名书写它们很不方便。我可以将此筛选器应用于整个存储库吗

我发现
@FilterDef
但我不知道如何使用,也不知道spring是否支持此注释。

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

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

顺便说一句,我认为更好的解决方案是使用SpringDataJPA的
@Query
注释手工编写查询。因为这样,您可以根据方法的上下文含义命名方法,而不是根据其内部实现命名方法


例如,您可以将您的方法命名为
findActiveJobsForUser
,这可能更有意义和可读性。

我认为这是不可能的。如果您使用Hibernate作为持久性提供程序(与大多数人一样),则使用Hibernate筛选器没有任何错误或不起作用。JPA不支持它,但这并不意味着没有使用它的方法(你甚至在回答中指出了这一点)。我知道,但是Spring Data JPA不会在Hibernate会话上调用
enableFilter()
disableFilter
方法。当您使用Spring数据时,您不想将Hibernate会话公开给其他层。即使在使用JPA时,您也可能(sporadicaly)希望使用底层机制,因为该机制可以做的比JPA单独做的更多。但正如您所说的,您可以使用AOP来实现这一点。@AmirPashazadeh,请您提供一个AOP方法的示例好吗?我无法想象。此AOP筛选器将用于查询(因此筛选器将位于数据库中)或查询结果?在AOP中,您必须访问curren hibernate会话并在其中启用筛选器。我很快就会提供样品