将提供的queryDSL谓词与预定义查询相结合

时间:2017-09-19 10:14:10

标签: spring spring-data-rest

在Spring Data REST的上下文中,我想在单个查询的结果上公开搜索/过滤功能。 如果我的查询是findAll,那将是开箱即用的(扩展QueryDslPredicateExecutor就足够了)。但是如何将我的自定义查询(findMyNotes)与用户提供的其他过滤(标记为已完成)结合起来。我的意思是:

@Entity
class Note {
    @Id
    private UUID id;
    private UUID personId;
    private String status;
    private String text;
}

@RepositoryRestResource(path = "notes", itemResourceRel = "notes", collectionResourceRel = "notes")
interface NoteRepository extends JpaRepository<Note, UUID>, QueryDslPredicateExecutor<Note> {

    @RestResource(path="notes/my")
    @Query("select n from Note n where n.personId=:creatorId")
    Page<Note> findDone(@Param("creatorId") UUID creatorId, Predicate predicate, Pageable pageable);
}

我没有找到任何开箱即用的东西。因此我想使用AOP和:

  1. 有多个映射到@RestResource
  2. 的路径(多个org.springframework.data.querydsl.QueryDslPredicateExecutor#findAll(Predicate, org.springframework.data.domain.Pageable)?)
  3. 有我自己的注释,它会指向返回原始queryDSL谓词的方法(在我的示例中为@Query的内容)
  4. 通过AOP计算这两个谓词的AND并将其作为参数传递给findAll方法
  5. 问题是我不知道如何做第一点(除了在servlet过滤器中进行黑客攻击) - 将多条路径映射到同一个findAll方法。

    或者可能是我错过了一些开箱即用的东西?

0 个答案:

没有答案