如何在Spring JPARepository中复制Hibernate的@Where功能

时间:2017-01-03 22:14:30

标签: spring spring-data spring-data-jpa jpql

我们的一个实体是使用@Where注释来定义来处理“软删除”。

@Entity
@Where(clause="user_type_cd != 'X'")
public class User {
...

现在,我们意识到有时候,我们仍然希望找到这样的实体。不幸的是,@ Where注释按设计工作,因此我们在JPARepository中定义的查找器无法找到已删除的用户。

例如,

@Repository("userRepo")
public interface UserRepository extends JpaRepository<User, Long> {
    User findByLoginId(String login);
}

如果用户已被删除,则如果user_type_cd等于'X',则findByLoginIs()方法将不返回用户。

然而,有时候,我们仍然想找到这样的用户,所以我想移动

@Where(clause="user_type_cd != 'X'")

从实体到存储库的注释。这样,我不必更新存储库中的所有方法,它会自动将此标准添加到所有查找程序。然后,我可以创建另一个存储库,它将找到所有用户而不考虑软删除。

然而,我无法弄清楚我可以用来让所有发现者自动附加的确切方法

clause="user_type_cd != 'X'"

存储库的所有方法的标准,而不必为每个finder方法显式编写自定义@Query(“...和user_type_cd!='X'”)。

因此,简而言之,我正在寻找所有自动生成的findBy和这样的方法,将user_type_cd!='X'附加到每个生成的查找中。

有关如何在不使用自定义@Query注释的情况下完成此任务的任何想法?

1 个答案:

答案 0 :(得分:0)

我相信您正在寻找的是其中之一:

  1. Spring data jpa specifications
  2. Querydsl

其中一个都可以通过简单的Google搜索获得大量信息。这是一个有用的spring.io blog,其中包含有关两者的详细信息以及如何在JpaRepository中使用它们。