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