Краткое описание
Как заставить findBy<Field>In
работать с IN
, когда ввод списка массивов равен нулю. например игнорируй это. Как будет выглядеть ваш DAO для этого?
Подробнее описание.
Представьте, что вы создали страницу поиска пользователей.
в приложении. У вас есть различные варианты фильтрации.
- создано (всегда указан диапазон дат)
- Страна (при нулевом значении игнорировать и искать все страны)
- Возрастной диапазон
- Название работы
- и т.д...
Теперь предположим, что вы хотите найти всех пользователей в заданном диапазоне дат в списке стран.
При поиске пользователей я всегда буду искать дату присоединения, однако, если я не выбрал страну, я хочу, чтобы она искала все страны.
Я планирую добавить еще несколько параметров фильтра, кроме страны. Поэтому я действительно не хочу создавать множество методов findBy для каждой возможной комбинации полей.
ДАО
@Repository
public interface UserDao extends JpaRepository<User, Long> {
public List<BeatRate> findByCreatedBetweenAndCountryIn(Date from, Date to, ArrayList<String> countryList );
}
Тест
@Test
public void test() throws ParseException {
Date from = new SimpleDateFormat( "yyyy-MM-dd" ).parse( "2015-01-01" );
Date to = new SimpleDateFormat("yyyy-MM-dd").parse("2015-05-15");
//ArrayList<String> countryList = new ArrayList<String>();
//countryList.add("UK");
//countryList.add("Australia");
//countryList.add("Japan"); // works ok when I have a list
countryList = null; // I want it to search for all countries when this is null -- this errors and doesnt work..
List<BeatRate> beatRates = beatRateDao.findByCreatedBetweenAndRentalCountryIn(from, to, countryList);
Assert.assertTrue(beatRates.size()>0);
}