2017-05-10 19 views
1

JPAのnamedquery順序でない場合はnull

私は(彼らの序数に応じて)最初の両親などの項目を一覧表示したい
---------------------------------------- 
| Table: Menu       | 
---------------------------------------- 
| id | parent | name | ordinal | 
---------------------------------------- 
| 1 | null | search | 1 | 
--------------------------------------- 
| 2 | null | location | 2 | 
---------------------------------------- 
| 3 | 1 | artifact | 1 | 
---------------------------------------- 
| 4 | 2 | city | 1 | 
---------------------------------------- 
| 5 | 2 | county | 2 | 
---------------------------------------- 

、その後、残りの次のように私は、親子関係を自己参照を持つ、テーブルを持っています子供たちはその司令官に従っています。階層の部門は1です。しかし、私は次のクエリを実行すると、それは親を持つ項目(つまり子供のみ)をリストします。 nullの親(つまりルート)を持つ親を除く

SELECT m FROM Menu m ORDER BY m.parent.ordinal, m.ordinal --> excludes root items 

はこのような何か書くための方法があります:
SELECT m FROM Menu m ORDER BY IF_EXISTS(m.parent.ordinal), m.ordinal --> should include root items too 

はありがとう..

答えて

0

あなたがここにCOALESCE()を使用して試すことができますが、および割り当て親レコードに0の値。これは子供レコードの前に置くでしょう。

--------------------------------------------------------- 
| Table: Menu           | 
--------------------------------------------------------- 
| id | parent | name | ordinal | parent.ordinal | 
--------------------------------------------------------- 
| 1 | null | search | 1 |  0  | 
--------------------------------------------------------- 
| 2 | null | location | 2 |  0  | 
--------------------------------------------------------- 
| 3 | 1 | artifact | 1 |  1  | 
--------------------------------------------------------- 
| 4 | 2 | city | 1 |  2  | 
--------------------------------------------------------- 
| 5 | 2 | county | 2 |  2  | 
--------------------------------------------------------- 

私はあなたがJPA 2.0以降を(this SO questionをq.v.)を使用していることを前提としています。ここ

SELECT m 
FROM Menu m 
ORDER BY 
    COALESCE(m.parent.ordinal, 0), 
    m.ordinal 

は、あなたのテーブルには、このロジックを使用してどのようになるかです。

関連する問題