JPA规范是否等效于ResultTransformer.DISTINCT_ROOT_ENTITY?

Bra*_*aek 5 java sql jpa distinct

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

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

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

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);
Run Code Online (Sandbox Code Playgroud)

如您所见,我可以包含一个JOIN。多个用户被映射到一个Web内容项。但是,例如,当有3个用户映射到1个Web内容项时,该Web内容项仅应显示1次,而应显示3次。过去我曾遇到过此问题,标志ResultTransformer.DISTINCT_ROOT_ENTITY当时帮助了我,但现在无法使用该功能。

当然,我可以实施自己的解决方案以省去双打,但这对于性能而言将是可怕的。而且我已经尝试过更改JoinType,但结果始终相同。

有人在那里有一些提示可以帮助我吗?:-)

提前致谢!

亲切的问候,K

小智 1

尝试在 CriteriaQuery 中使用unique(boolean)