java - Spring Data JPA Select Distinct

标签 java sql spring spring-data-jpa

我有一种情况需要构建 select distinct a.address from Person a (其中地址是人员内部的地址实体)类型的查询。

我正在使用规范来动态构建我的 where 子句并使用 findAll(Specification<T>)函数来获取结果。问题是我不能使用规范来构建我的选择子句,因此不能使用 findAll(Spcification)功能。

做这样的事情最好的方法是什么?

最佳答案

由于这是谷歌的首要问题,我将在此处发布答案。

在规范中你有权查询,所以你可以这样做

query.distinct(true);

完整示例,导致发出此类 SQL:

2015-04-27 12:03:39 EEST [7766-759] postgres@sales LOG: execute : SELECT DISTINCT t1.ID, t1.NAME, t1.WEBNAME, t1.WEBORDER, t1.PVGROUPPARENT_ID, t1.SITE_ID FROM PRODUCTVARIANT t0, PVGROUP t1 WHERE ((t0.PRODUCTTYPE_ID = $1) AND (t0.PVGROUP_ID = t1.ID)) 2015-04-27 12:03:39 EEST [7766-760] postgres@sales DETAIL: parameters: $1 = '4608bdc9-d0f2-4230-82fd-b0f776dc2cfd'

public static Specification<PVGroup> byProductType(final ProductType pt) {
        return (final Root<PVGroup> root, final CriteriaQuery<?> query, final CriteriaBuilder builder) -> {

            query.distinct(true);
            final CollectionJoin<PVGroup, ProductVariant> jPV = root.join(PVGroup_.productVariant);

            final Path<ProductType> ptPath = jPV.get(ProductVariant_.productType);

            return builder.equal(ptPath, pt);
        };
    }
}

关于java - Spring Data JPA Select Distinct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12943574/

相关文章:

mysql - 由于这些错误,无法继续进行 drupal 安装

java - Connect 4 Java Win 条件检查

Java - 字符串不会写入文件

java - 如何从Java方法返回.class?

mysql - 全短语优先搜索

MySQL CROSSTAB 或 PIVOT 查询

java - 如何配置禁止 EAR 文件内 WAR 文件的启动?

java - 初始化时关闭 Spring

spring - 为什么 Spring 在 Authentication 和 UserDetails 中有重复字段?

java - 如何调整代码以使用两个参数而不是一个参数?