Метод именования пружин jpa

#jpa

Вопрос:

у меня есть простая JpaRespository, где я должен использовать некоторые методы с именем spring

это выглядит так

 select * from a where a.user_id in ( some id values)
 

в jpa тот же запрос будет выглядеть так

 List<A> findAllByUserIdIn(List<Long>ids) 
 

и его работа довольно хороша

и что мне нужно знать ?как создать один и тот же запрос в методе именования spring

в sql это выглядит так

 select * from a where a.user_id in ( some values...) and ( a.created_at <='some date" or a.updated_at<='some date)
 

я пытался сделать что-то вроде этого

 List<A> findAllByUserIdInAndCreatedAtLessThanEqualOrUpdatedAtLessThanEqual(List<Long>ids,TimeStamp created_at,TimeStamp  updated_at)
 

но это работает неправильно — он выдает мне все записи с обновлениями меньше этой даты, но их нет в текущем списке идентификаторов пользователей, и я знаю, почему — потому что его значение OrUpdatedAtLessThanEqual,
если я это сделаю, и значение AndUpdatedAtLessThanEqual тоже работает неправильно

итак, есть ли какой-либо способ сделать то, что мне нужно, без создания собственного запроса

Комментарии:

1. Вы не можете, вы не можете определить приоритет оператора. И даже если бы это было возможно, использование сложных имен методов не рекомендуется. Просто используйте @Query аннотацию.

Ответ №1:

То, что вы написали findAllByUserIdInAndCreatedAtLessThanEqualOrUpdatedAtLessThanEqual , верно, но если вы внимательно посмотрите в своем собственном запросе, вы найдете скобки, которые группируют условия.

 Requirement - condition1 AND (condition2 OR condition3)
Your method name - condition1 AND condition2 OR condition3
 

Поскольку нет функции для размещения сгруппированных условий, вам придется использовать @Query аннотации.

Аннотация @Query не только уменьшает головные боли, связанные с невозможностью чтения длинных имен методов JPA, но также исключает использование соединений (поскольку вы будете использовать имена параметров, используемые в сущности, вместо имен столбцов в таблице), что, в свою очередь, улучшает читаемость и уменьшает использование собственных запросов.