首页 文章

Spring Data JPA和QueryDSL

提问于
浏览
5

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

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

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

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

谢谢!

埃里克

1 回答

  • 10

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

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

相关问题