我有一个用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查询。我该如何解决这个问题?
答案 0 :(得分:1)
提到的带有规范和谓词的Criteria API有点难以习惯,但它是处理动态条件的好方法。 我不认为可以将基于注释的查询与编程查询创建混合在一起。