Hej
Mam takie zapytanie w SQL, baza danych Oracle:
@Query("""
SELECT p FROM Product p
WHERE
p.type = :type
AND p.status = :status
""")
List<Product> findProducts(@Param("type") String type, @Param("status") String status);
Chciałbym rozszerzyć szukanie produktów, user będzie mógł podać dwa parametry - onlyRegistered
typu boolean
i ownerId
- typu String
W bazie danych jest pole OWNER_ID
typu string, które zawiera id firmy, który wytwarza produkt, bądź gdy jest nullem - oznacza że produkt jest firmy niezarejestrowanej u nas w bazie.
@Query("""
SELECT p FROM Products p
WHERE
p.type = :type
AND p.status := :status
/* tu jakiś CASE */
""")
List<Product> findProducts(@Param("type") String type, @Param("status") String status,
@Param("onlyRegistered") boolean onlyRegistered, @Param("ownerId") String ownerId);
Jeśli user poda:
-
onlyRegistered
równetrue
iownerId
równeNULL
, to wtedy zapytanie powinno wyciągać wszystko co maOWNER_ID IS NOT NULL
-
onlyRegistered
równetrue
iownerId
z jakąś wartością, to wtedy zapytanie powinno wyciągać wszystko co maOWNER_ID = wartość
-
onlyRegistered
równefalse
,ownerId
jest wtedy bez znaczenia, zapytanie powinno wyciągać wszystko co maOWNER_ID IS NULL
Nie wiem jak do końca zrobić to zapytanie, proszę o pomoc:
Wydaje mi się, że trzeba zrobić coś w tym stylu -> https://stackoverflow.com/questions/15396217/if-statement-within-where-clause
Ale nie wiem jak to obsłużyć dla NULL
I i true
/false
, zrobiłem tylko dla trywialnych Stringów :/