指定应考虑进行不同计算的列

Specfiy columns which should be considered for distinct calculation

我正在使用 javax.persistence.criteria.CriteriaBuilder and javax.persistence.criteria.CriteriaQuery 来 select 一些实体。

我现在只想 select 应该由特定列指定的唯一实体。

有一种方法 javax.persistence.criteria.CriteriaQuery#distinct 只有 returns 个唯一实体。

我宁愿需要像

这样的东西
CriteriaQuery<T> distinct(String... columnNames)

你知道我如何在我的 JPA 中烘焙这样一个独特的东西吗CriteriaQuery

似乎可以 Hibernate.

distinct 接受一个布尔值作为参数。您可以使用 multiselect 到 select 多个列,如本例所示:

CriteriaQuery<Country> q = cb.createQuery();
Root<Country> c = q.from(Country.class);
q.multiselect(c.get("currency"), c.get("countryCode")).distinct(true);

下面的语句没有意义:

I now want to select only the entities that are unique which should be specified by a certain column.

如果结果集是 'exactly the same',则结果集按 'distinct' 筛选。 如果只有一些字段相同,则实体不相同。

您可以通过以下方式在结果集上创建不同的子句:

CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery query = builder.createQuery();
Root<Friend> c = query.from(Friend.class);
query.multiselect(c.get(Friend_.firstName),c.get(Friend_.lastName)).distinct(true);

然后您将从 Friend 实体中获得 firstName 和 lastName 的唯一组合。

例如...'Give me all unique combinations from my Friends where the firstName and lastName of the friend is unique.'但这并不意味着给我独特的朋友。