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

时间:2016-03-22 15:52:26

标签: java jpa distinct criteria criteria-api

我使用javax.persistence.criteria.CriteriaBuilderjavax.persistence.criteria.CriteriaQuery来选择一些实体。

我现在只想选择应该由某一列指定的唯一实体。

方法javax.persistence.criteria.CriteriaQuery#distinct只返回唯一的实体。

我宁愿需要像

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

你知道如何在我的JPA CriteriaQuery中烘焙这么明显吗?

似乎可以使用Hibernate.

2 个答案:

答案 0 :(得分:0)

distinct将布尔值作为参数。您可以使用multiselect选择多个列,如下例所示:

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

答案 1 :(得分:0)

以下陈述毫无意义:

  

我现在想要只选择应该是唯一的实体   由某列指定。

如果结果集“完全相同”,则会将结果集过滤为“distinct”。 如果只有一些字段是相同的,那么实体就不一样了。

您可以通过以下方式对结果集创建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的唯一组合。

例如......“给我朋友的所有独特组合,其中朋友的firstName和lastName是唯一的。”但这并不意味着给我独特的朋友。