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:
onlyRegisteredrównetrueiownerIdrówneNULL, to wtedy zapytanie powinno wyciągać wszystko co maOWNER_ID IS NOT NULLonlyRegisteredrównetrueiownerIdz jakąś wartością, to wtedy zapytanie powinno wyciągać wszystko co maOWNER_ID = wartośćonlyRegisteredrównefalse,ownerIdjest 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 NULLI i true/false, zrobiłem tylko dla trywialnych Stringów :/