我使用javax.persistence.criteria.CriteriaBuilder
和javax.persistence.criteria.CriteriaQuery
来选择一些实体。
我现在只想选择应该由某一列指定的唯一实体。
方法javax.persistence.criteria.CriteriaQuery#distinct
只返回唯一的实体。
我宁愿需要像
这样的东西CriteriaQuery<T> distinct(String... columnNames)
你知道如何在我的JPA CriteriaQuery
中烘焙这么明显吗?
似乎可以使用Hibernate.
答案 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是唯一的。”但这并不意味着给我独特的朋友。