SELECT e.text FROM Entity e WHERE e.key = :key XOR e.key IS NULL
Edit, vid närmare eftertanke kommer inte det där funka...
6 svar · 534 visningar · startad av Simkisen
En till query, lite simplare dock.
id | text | key
------------------
1 | hejsan | null
2 | hello | 'en'
------------------
JPQL:
SELECT e.text FROM Entity e WHERE e.key = :key OR e.key IS NULL
ger båda raderna om key = 'en' (fel),
men ifall jag kör queryn för key = 'sv' så får jag bara en rad (rätt).
key = 'en' skall endast ge en rad också och i det fallet endast texten hello.
varje körning utav queryn skall endast ge en rad som svar (en text snutt). användningsområdet är default värde med möjlighet att overrida det för ens egna key.
Eftersom man bara hämtar ut en text så måste det inte vara JPQL utan vanlig native SQL funkar också men föredrar JPQL. anyway, har ni någon idé så är ni välkomna att komma med de.
Hare gött!
SELECT e.text FROM Entity e WHERE e.key = :key XOR e.key IS NULL
Edit, vid närmare eftertanke kommer inte det där funka...
mm, med tanke på att båda jämförelserna kan vara true så failar det tyvärr..
Jag hade kanske löst det med följande SQL:
SELECT e.text FROM Entity e WHERE e.key = key OR e.key IS NULL ORDER BY CASE WHEN e.text IS NOT NULL THEN 1 ELSE 2 END LIMIT 1
Peter, jag satt och testade med något liknande, fast utan CASE. (Jag får för övrigt inte din case-kod att funka, ens när jag ändrar END till END CASE)
ORDER BY e.key DESC verkar funka bra.
SELECT e.text FROM `test_default` e
WHERE e.stringid = 0 AND (e.key = 'tr' OR e.key IS null)
ORDER BY e.key DESC
LIMIT 1;
Frågan är vilket DBMS ts använder, det är inte säkert att CASE existerar i den aktuella dialekten. Är det MySQL fungerar CASE och framför allt i ORDER BY.
MySQL med Toplink är det men är inte säker på att CASE funkar med JPQL dock, har inte hunnit testa än.