2009-08-28 7 views
32

JPAでDISTINCTはどの列に対応していますか?JPAでのDISTINCTの使用

ここでDISTINCTを使用した例JPAクエリです:

select DISTINCT c from Customer c 

多くの意味をなしません - 個別の何列に基づいているのですか?私はそれを見つけることができなかったので、注釈としてエンティティに指定されていますか?

私のようなもの、上の区別をするために列を指定したいと思います:

select DISTINCT(c.name) c from Customer c 

私はMySQLと休止状態を使用しています。

答えて

5

更新:トップに投票してください。

マイ・アカウントは現在のところ廃止されています。歴史的な理由からここに保管されています。 HQLで個別


通常、あなた自身のような単純な例で参加していないで必要とされます。

は、あなたが接近しているHow do you create a Distinct query in HQL

+10

犯行はありませんが、これがどのように回答として受け入れられるのですか? –

+3

2009年から2012年には唯一の回答だったのでしょうか? – kazanaki

+0

それは私が考慮しなかった有効な点です。私は今それができることをうれしく思っています。 –

11
@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(); 
     } 
} 
43

も参照してください。

select DISTINCT(c.name) from Customer c 
+10

これは、その列の配列を返します。このアプローチでエンティティ全体を返す方法 – cen

+0

@cen - あなたが求めていることは論理的ではありません。このようなクエリで返されるべき顧客(id = 1234、name = "Joe Customer")と(id = 2345、name = "Joe Customer"結果は未定義です。これを行うには構文がどのように機能するのかよくわからないが、これは一般的な考え方を与えるはずだ: 'Customerからcを選択する。c id id(dを選択する.d)あなたがエンティティの1つを選択するのに利用できる属性に基づいて方法を考え出す必要があるため、状況に依存します。 – Jules

+0

@Jules - このような場合は、通常どのようなものが返されるかを気にする必要はありません。私はmysqlがデフォルトでこのシナリオを処理すると思います。私は2年前に私が持っていた正確なユースケースを覚えていません。 – cen

6

私はkazanakiの答えに同意し、それは私を助けました。 は、私は、全体のエンティティを選択したかったので、私は、私は多対多の関係を持っている、と私は1つのクエリでコレクションを持つエンティティをロードしたい私の場合は

select DISTINCT(c) from Customer c 

を使用しました。

LEFT JOIN FETCHを使用しましたが、最終的に結果を明確にする必要がありました。

関連する問題