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

2024-06-22

我有一个用 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马上。无论如何有可能吗?

通过互联网筛选我找到了解决方案动态查询 https://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/。但是,我想它们仅适用于我没有自定义查询的情况,即-否@Query在查询中repository.

还有另一个有趣的问题 https://stackoverflow.com/questions/30431035/spring-jpa-repository-dynamic-query我发现。但这也适用于只有一个表要查询的情况。

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


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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将动态条件添加到 JPA 自定义查询 的相关文章

随机推荐