Я использую Spring Data JPA и пытаюсь добавить запрос в мой репозиторий. Я пытался просто построить запрос без аннотации @Query как:Spring JPA Data «OR» query
List<Item> findByTypeAndStateOrStateAndStartDateBetween(Type type, State s, State s2, Date startDate, Date endDate);
Моя цель состоит в том, чтобы построить запрос следующим образом:
select * from item where type = ? and (state = ? or state = ?) and start_date between ? and ?
Моя проблема с ИЛИ п. Есть ли способ убедиться, что есть скобки? В противном случае логика неверна. Примеры, которые я нашел здесь: http://static.springsource.org/spring-data/data-jpa/docs/1.0.0.M1/reference/html/#jpa.query-methods.query-creation
не имеют каких-либо или предложений с более чем одной колонкой.
Кроме того, есть ли способ передать список объектов. Например, если бы я хотел найти элементы с тремя состояниями, мне пришлось бы создать еще один запрос, который не очень хорошо масштабируется.
Спасибо.
EDIT:
Я понял, как перейти из списка состояний, используя обозначение @Query. Вы делаете это так:
@Query("FROM item i WHERE i.type = ?1 AND i.state IN (?2)")
Затем вы можете просто передать список методу в качестве второго параметра. Все еще не знаю, как это сделать, не используя нотацию @Query.
Я думаю, именно поэтому Spring Data позволяет указать запрос, он может идти только до сих пор в определении того, что вы хотите от имени метода в одиночку. Это нормально для простых запросов, но как только вы увеличите сложность, вам лучше сказать, что именно вы хотите, а не гадать. – Thevenin
Плюс @Query гораздо легче читать, чем длинное имя метода. – skel625
Спасибо, это вывод, к которому я пришел. Просто используйте @Query. – devo