DISTINCT在JPA中使用了哪些列,是否可以更改它?在JPA中使用DISTINCT
下面是使用DISTINCT的例子JPA查询:
select DISTINCT c from Customer c
不使有很大的意义 - 什么样的列是不同的基础上?它是否在实体上被指定为注释,因为我找不到一个?
我想指定列作上的区别,是这样的:
select DISTINCT(c.name) c from Customer c
我使用的MySQL和Hibernate。
DISTINCT在JPA中使用了哪些列,是否可以更改它?在JPA中使用DISTINCT
下面是使用DISTINCT的例子JPA查询:
select DISTINCT c from Customer c
不使有很大的意义 - 什么样的列是不同的基础上?它是否在实体上被指定为注释,因为我找不到一个?
我想指定列作上的区别,是这样的:
select DISTINCT(c.name) c from Customer c
我使用的MySQL和Hibernate。
更新:请参阅最高票数的答案。
我自己目前已经过时。由于历史原因,只保留在这里。
在HQL鲜明通常需要在你自己喜欢简单的例子,联接和不。
@Entity
@NamedQuery(name = "Customer.listUniqueNames",
query = "SELECT DISTINCT c.name FROM Customer c")
public class Customer {
...
private String name;
public static List<String> listUniqueNames() {
return = getEntityManager().createNamedQuery(
"Customer.listUniqueNames", String.class)
.getResultList();
}
}
你接近。
select DISTINCT(c.name) from Customer c
这只返回该列的数组。如何用这种方法返回整个实体? – cen 2016-12-20 07:52:37
@cen - 你要求的是不合逻辑的。如果我有两个客户(id = 1234,name =“Joe Customer”)和(id = 2345,name =“Joe Customer”),应该为哪种查询返回?结果将是不确定的。现在,你可以用类似的东西来强制它(不太清楚这样的语法是如何工作的,但是这应该给出一般的想法):'从客户c选择c,其中id在(从客户d选择min(d.id) group by d.name)'......但这是一种依赖于情况的情况,因为您需要根据可用于选择某个实体的属性来提出一种方法。 – Jules 2018-02-14 21:00:32
@Jules - 在这种情况下,您通常不会关心哪个返回,因此任何选择技术都可以。我认为MySQL甚至默认处理这种情况。我不记得我2年前的确切用例。 – cen 2018-02-15 11:39:24
我同意kazanaki的答案,这帮助了我。 我想选择整个实体,所以我用
select DISTINCT(c) from Customer c
在我来说,我有很多一对多的关系,我想在一个查询与收藏加载实体。
我用了LEFT JOIN FETCH,最后我不得不做出不同的结果。
我会使用JPA的构造函数表达式功能。另请参阅以下的答案:
JPQL Constructor Expression - org.hibernate.hql.ast.QuerySyntaxException:Table is not mapped
继问题的例子,它会是这样的。
SELECT DISTINCT new com.mypackage.MyNameType(c.name) from Customer c
没有冒犯,但是怎么会被接受为答案呢? – 2015-07-16 11:00:46
也许是因为这是唯一的答案:-)从2009年到2012年? – kazanaki 2015-07-16 13:05:33
这是一个我没有考虑过的有效点。我很高兴现在是可行的。 – 2015-07-16 14:19:47