【发布时间】:2021-10-13 00:57:42
【问题描述】:
我正在尝试使用 JPA 规范编写以下查询。 从 hcp 中选择不同的名称,其中 area = 'Dhaka';
select distinct name from hcp where area = 'Dhaka';
hcp 实体如下所示
@Entity
public class HCP implements Serializable {
@Id
@Column
private String id;
@Column
private String name;
@Column
private String area;
}
表格应该是这样的
我尝试使用 jpa-specification 转换上述查询,如下所示。它正在选择“名称”字段,我已将 distinct 设置为 true
List<HCP> result = hcpRepository.findAll(new Specification<HCP>() {
@Override
public Predicate toPredicate(Root<HCP> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
query.select(root.get("name")).distinct(true);
return criteriaBuilder.equal(root.get("area"), "Dhaka");
}
});
但它不起作用。它仅在具有 @Id 注释的字段上应用区。我想在 area 字段上应用 distinct。
生成的 Hibernate 查询如下所示:
select
distinct hcp0_.id as id1_0_,
hcp0_.area as area2_0_,
hcp0_.name as name3_0_
from
hcp hcp0_
where
hcp0_.area=?
如何获得如下生成的查询?
select
distinct hcp0_.name as name3_0_
from
hcp hcp0_
where
hcp0_.area= 'Dhaka'
所需的结果将根据区域列出不同的名称。 如何使用 JPA 规范在特定字段上应用 distinct?
所需的查询和输出:
【问题讨论】:
-
但是你想要 HCP 作为结果。所以你不能像这样使用 distinct 。您的查询结果应该是什么?
-
@SimonMartinelli 您好,感谢您指出。我已经用所需的输出和更多信息更新了这个问题。希望它能澄清你的问题。
标签: spring-boot hibernate spring-data-jpa