Chcę mieć interfejs repozytorium danych sprężynowych, który pobiera dwa parametry. Czy istnieje sposób, aby sprawić, by miało ono następujące zachowanie?Dane sprężyny - ignoruj parametr, jeśli ma wartość pustą
MyObject findByParameterOneAndParameterTwo(String parameterOne, String parameterTwo);
Jeśli oba parametry mają wartość, chciałbym aby zachowywała się normalnie i wykonywała "AND" dla obu wartości.
Jeśli na przykład drugi parametr jest null, wtedy byłoby szukać tylko ParameterOne
Wszelkie sugestie?
Mechanizm wyprowadzania zapytania z nazwy metody repozytorium podanej przez Spring Data jest przeznaczony dla przypadków, w których zapytanie jest znane z góry. Nie można oczekiwać, że mechanizm ten będzie działał z zapytaniami, które są dokładnie znane tylko w czasie wykonywania. W przypadku sytuacji dynamicznych istnieje kilka innych opcji, takich jak '@ Query' i QueryDSL. SQL i JPA obsługują funkcję 'COALESCE', która może być użyta do obejścia parametru, który czasami może mieć wartość' NULL'. '@Query (" SELECT e FROM MyObject i WHERE COALESCE (e.parameterOne,? 1) =? 1 AND COALESCE (e.parameterOne,? 2) =? 2 ")' powinno działać. – manish
@manish Myślę, że 'COALESCE (? 1, e.parameterOne) = e.parameterOne' jest twoją intacją. – Blank
@Forward, podałem tylko kierunek plakatu, ponieważ nie jestem pewien, w jaki sposób plakat chce, aby dopasowanie dokładnie działało. Na przykład nie określono, czy baza danych może zawierać wartości "null" dla tych kolumn, a jeśli tak, to w jaki sposób powinno pasować, i tak dalej. Ale tak, w oparciu o to, co zostało opublikowane, twój komentarz jest trafny. – manish