将动态条件添加到JPA自定义查询

时间:2017-11-13 14:14:15

标签: spring hibernate jpa spring-data-jpa

我有一个用HQL编写的复杂查询(使用多个连接和子查询),我在Repository类中使用过它。类似于下面的一个 -

@Repository
public interface DataRepository extends PagingAndSortingRepository<Data,String> {

    public List<Data> findByService(@Param("service")Service service, Pageable page);

    @Query("SELECT DISTINCT d from Data d "
            +" WHERE (d.working in (SELECT d1 from Data d1 "
                +" JOIN d1.working d1w "
                +" JOIN d1.service s WITH (s in (:serviceList)))"
            +" OR d.cleared IS NOT NULL) AND [..several other CRITERIA]")
    public Page<Data> findForServices(@Param("serviceList")Set<Service> serviceList, Pageable page);
....

现在我需要动态添加标准。这些标准的数量是灵活的,这使我不能直接将其纳入HQL。无论如何可能吗?

通过互联网筛选我遇到了dynamic query的解决方案。但是,我猜他们只适用于我没有自定义查询的情况,即@Query中的查询没有repository

我找到了另一个interesting question。但这也适用于您要查询单个表的情况。

我不想切换到原始SQL查询。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

提到的带有规范和谓词的Criteria API有点难以习惯,但它是处理动态条件的好方法。 我不认为可以将基于注释的查询与编程查询创建混合在一起。