Java Spring数据JPA和QueryDSL
我是SpringDataJPA的新手,正在尝试了解如何在QueryDSL中最好地使用它。如果没有QueryDSL,我就可以在SpringData界面中使用@Query注释简单地创建任何查询 为了获得使用QueryDSL的相同体验,据我所见,我需要创建自己的自定义存储库实现,并让我的repo接口扩展我的自定义实现接口,或者将所有QueryDSL查询放在包装我的repo的服务层上 在第一种情况下,我无法在自定义repo中使用任何SD自动生成的方法(例如:findAll(QueryDSL谓词)),因为我无法访问实际的repo对象,在第二种情况下,我将查询逻辑放在服务层而不是repo层 这两种解决方案对我来说都不是特别有吸引力。有第三种方法更合适吗?还是我误解了如何正确使用QueryDSL和Spring数据 谢谢Java Spring数据JPA和QueryDSL,java,spring-data,querydsl,Java,Spring Data,Querydsl,我是SpringDataJPA的新手,正在尝试了解如何在QueryDSL中最好地使用它。如果没有QueryDSL,我就可以在SpringData界面中使用@Query注释简单地创建任何查询 为了获得使用QueryDSL的相同体验,据我所见,我需要创建自己的自定义存储库实现,并让我的repo接口扩展我的自定义实现接口,或者将所有QueryDSL查询放在包装我的repo的服务层上 在第一种情况下,我无法在自定义repo中使用任何SD自动生成的方法(例如:findAll(QueryDSL谓词)),因为
Eric最方便的方法可能是让您的存储库接口简单地扩展
querydsldpredicateexecutor
,这增加了简单地将QuerydslPredicate
对象导入存储库并单独或与Pageable
和Sort
等一起执行的功能
如果您真的想将谓词组合隐藏到存储库层中(这很好,但实际上起到了不同的作用),您可以按照描述创建一个单独的存储库实现类,并使用
QueryDslRepositorySupport
作为基类。在实现的finder方法中,您可以使用from(…)
、update(…)
和delete(…)
基类的方法,使用Querydsl元模型轻松构造和执行查询。最方便的方法可能是让存储库接口简单地扩展Querydsl谓词执行器
,这增加了将Querydsl谓词
对象简单地导入存储库并执行的功能它们是独立的,或者与可分页的
和排序
等一起使用
如果您真的想将谓词组合隐藏到存储库层中(这很好,但实际上起到了不同的作用),您可以按照描述创建一个单独的存储库实现类,并使用
QueryDslRepositorySupport
作为基类。在实现的finder方法中,您可以只使用基类的from(…)
、update(…)
和delete(…)
方法,使用Querydsl元模型轻松构造和执行查询。问题不是将谓词组合隐藏到存储库中,对我来说,这是关于添加分组依据
和。。。我的查询和执行它们时,只有谓词似乎不接近这一点。不幸的是,querydsldpredicateexecutor
不允许使用groupBy
等。只允许使用查询的where
部分。这通常是不够的。但是使用querydsrepositorysupport
作为基类的定制存储库impl非常好@azerafati,看一看,这可能就是你要找的。问题不是将谓词组合隐藏到存储库中
,对我来说,这是关于添加分组依据
和。。。我的查询和执行它们时,只有谓词似乎不接近这一点。不幸的是,querydsldpredicateexecutor
不允许使用groupBy
等。只允许使用查询的where
部分。这通常是不够的。但是使用querydsrepositorysupport
作为基类的定制存储库impl非常好@阿泽拉菲蒂,看看,这可能就是你要找的。