Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.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 JPA规范等效于ResultTransformer.DISTINCT\u ROOT\u实体?_Java_Sql_Jpa_Distinct - Fatal编程技术网

Java JPA规范等效于ResultTransformer.DISTINCT\u ROOT\u实体?

Java JPA规范等效于ResultTransformer.DISTINCT\u ROOT\u实体?,java,sql,jpa,distinct,Java,Sql,Jpa,Distinct,我想知道在JPA规范中是否有与ResultTransformer.DISTINCT_ROOT_实体等效的实体?现在,我正在尝试实现搜索功能,我必须为此使用JPA规范(我不允许使用CriteriaQuery或其他替代方法) 我必须在搜索查询中执行联接,因为实体之间存在一对多关系 所以,现在,我正在做这个: String type = "admin"; SpecificationBuilder sb = SpecificationBuilder.getInstance(); Specificatio

我想知道在JPA规范中是否有与ResultTransformer.DISTINCT_ROOT_实体等效的实体?现在,我正在尝试实现搜索功能,我必须为此使用JPA规范(我不允许使用CriteriaQuery或其他替代方法)

我必须在搜索查询中执行联接,因为实体之间存在一对多关系

所以,现在,我正在做这个:

String type = "admin";
SpecificationBuilder sb = SpecificationBuilder.getInstance();
Specification<WebContentImpl> spec = new Specification<WebContentImpl>() {
    @Override
    public Predicate toPredicate(Root<WebContentImpl> root, CriteriaQuery<?> cq, CriteriaBuilder cb) {
        return cb.equal(root.join("users", JoinType.LEFT).get("type"), type);
    }
};
sb.addSpecification(spec);
String type=“admin”;
SpecificationBuilder sb=SpecificationBuilder.getInstance();
规格规格=新规格(){
@凌驾
公共谓词toPredicate(根根、CriteriaQuery cq、CriteriaBuilder cb){
返回cb.equal(root.join(“用户”,JoinType.LEFT).get(“类型”),type);
}
};
sb.addSpecification(spec);
如您所见,我可以包含一个JOIN。多个用户映射到单个web内容项。但是,例如,当有3个用户映射到1个web内容项时,web内容项只应显示1次,但会显示3次。我在过去遇到过这个问题,当时标志ResultTransformer.DISTINCT\u ROOT\u实体帮助我解决了这个问题,但我现在无法使用该功能

当然,我可以实施我自己的解决方案来排除双打,但这将对性能造成严重影响。我已经尝试过更改JoinType,但结果总是一样的

有谁能给我一些建议吗?:-)

提前谢谢

亲切问候,,
K

尝试使用。

您可以通过基于根表主键列的
分组方式来消除重复:

cq.groupBy(root.get("id"));

假设
WebContentImpl.is
是该表的主键列。

@braok我有同样的问题,您是否得到了答案或解决方法?实际上,这会生成预期结果,但结果查询将包含有性能考虑的
distinct
子句。