1
我有一個表存儲應用的配置參數,如下所示:JPQL合併非標量?
setName | key | value
----------------------------------
dev | FooEnabled | true
dev | BarEnabled | true
qa | FooEnabled | false
...etc...
每個參數,密鑰/值組合,屬於一個特定的「配置集」。可以很容易地選擇一組特定的所有屬性:
SELECT p Parameter p WHERE p.setName = :name
所以,如果我想在一個名爲"dev"
配置集合中的所有參數,我會回來
dev | FooEnabled | true
dev | BarEnabled | true
現在,我想選擇兩套聯合:
SELECT p Parameter p WHERE p.setName = :name1 OR p.setName = :name2
...但排除行有重複鍵在設置給性能與name1
優先級高於在集與012性能。如果name1
是"qa"
和name2
是"dev"
,那麼這將返回
dev | FooEnabled | true
qa | BarEnabled | false
爲了澄清,查詢應該選擇:
- 每個屬性的設置名字
name2
,除非... - 有一個名爲
name1
的同一個鑰匙的財產,在這種情況下... - 選擇與
setName = :name1
而不是用setName = :name2
什麼JPQL查詢將有效地做到這一點的行?如果COALESCE
非標量值的工作,那麼我想,這樣的事情可能工作:
SELECT
COALESCE(x, y)
FROM Property x, Property y
WHERE
x.setName = :name1 AND
y.setName = :name2 AND
x.key = y.key
但COALESCE
只接受標量值。有任何想法嗎?
其他查詢嘗試/失敗:
SELECT
CASE
WHEN (NOT EXISTS (SELECT y FROM Property y WHERE y.setName = :name1 AND y.key = x.key))
THEN x
ELSE y
END
FROM Property x
WHERE
x.setName = :name2
我也有興趣在以同樣的方式選擇各行,通過key
,我想看起來像下面的(如果只有COALESCE爲非標量工作):
SELECT
COALESCE(y, x)
FROM Property x, Property y
WHERE
x.key = :key AND
x.setName = :name1 AND
y.key = :key AND
y.setName = :name2
我與現在這個玩弄,但我沒有看到'orderColumn'排序的點... –
@Matt Ball我用這樣一種方式解釋了句子'通過給集合中的屬性設置name1更高的優先級比集合中的屬性設置name2',你希望在匹配集合中由name1頂部和每個匹配name2底部...也許那是錯的... – Omnaest