Spring Data JPA和QueryDSL

我是Spring数据JPA的新手,我正在尝试了解如何最好地使用它与QueryDSL。 没有QueryDSL,我可以使用@Query注释在SpringData接口中创建任何查询。

为了使用QueryDSL获得相同的体验,从我所看到的,我需要创建自己的自定义存储库实现并让我的repo接口扩展我的自定义实现接口或将我的所有QueryDSL查询放在包装我的repo的服务层。

在第一种情况下,我失去了在我的自定义仓库中使用任何SD自动生成方法(例如:findAll(QueryDSL谓词))的能力,因为我无法访问实际的仓库对象,在第二种情况下,我是将查询逻辑放在服务层而不是repo层。

这两种解决方案听起来都不是特别有吸引 有没有第三种方式更合适? 或者我误解了如何正确使用QueryDSL和Spring Data?

谢谢!

埃里克

可能最方便的方法是让您的存储库接口简单地扩展QueryDslPredicateExecutor ,这增加了将Querydsl Predicate对象简单地传输到存储库并独立执行或与PageableSort等一起执行的function。

如果您确实想要将谓词组合隐藏到存储库层(这绝对没问题但实际上有不同的用途),您可以创建一个单独的存储库实现类,如此处所述,并使用QueryDslRepositorySupport作为基类。 在您实现的finder方法中,您可以使用基类的from(…)update(…)delete(…)方法,使用Querydsl元模型轻松构造和执行查询。