Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring数据JPA和QueryDSL_Java_Spring Data_Querydsl - Fatal编程技术网

Java Spring数据JPA和QueryDSL

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谓词)),因为

我是SpringDataJPA的新手,正在尝试了解如何在QueryDSL中最好地使用它。如果没有QueryDSL,我就可以在SpringData界面中使用@Query注释简单地创建任何查询

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

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

这两种解决方案对我来说都不是特别有吸引力。有第三种方法更合适吗?还是我误解了如何正确使用QueryDSL和Spring数据

谢谢


Eric

最方便的方法可能是让您的存储库接口简单地扩展
querydsldpredicateexecutor
,这增加了简单地将Querydsl
Predicate
对象导入存储库并单独或与
Pageable
Sort
等一起执行的功能


如果您真的想将谓词组合隐藏到存储库层中(这很好,但实际上起到了不同的作用),您可以按照描述创建一个单独的存储库实现类,并使用
QueryDslRepositorySupport
作为基类。在实现的finder方法中,您可以只使用基类的
from(…)
update(…)
delete(…)
方法,使用Querydsl元模型轻松构造和执行查询。

问题不是
将谓词组合隐藏到存储库中,对我来说,这是关于添加
分组依据
和。。。我的查询和执行它们时,只有谓词似乎不接近这一点。不幸的是,
querydsldpredicateexecutor
不允许使用
groupBy
等。只允许使用查询的
where
部分。这通常是不够的。但是使用
querydsrepositorysupport
作为基类的定制存储库impl非常好@阿泽拉菲蒂,看看,这可能就是你要找的。