【发布时间】: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