【问题标题】:Add dynamic criteria to a JPA custom Query将动态条件添加到 JPA 自定义查询
【发布时间】:2018-04-26 06:07:34
【问题描述】:

我有一个用 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 的解决方案。但是,我想它们只适用于我没有自定义查询的情况,即在repository 的查询中没有@Query

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

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

【问题讨论】:

  • 是不是不能转换成CriteriaQuery这样容易动态构造的?我对其他可能性持怀疑态度。你到底是什么意思但这也适用于你有一个表要查询的情况?这个stackoverflow.com/a/30436524/6413377可能有问题?

标签: spring hibernate jpa spring-data-jpa


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2015-10-22
    • 1970-01-01
    • 2021-07-28
    • 2022-01-12
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多