Как добавить дополнительный параметр ко всем запросам в репозитории

Я разрешаю системе создавать запросы по именам методов:

public interface CompanyRepository extends JpaRepository<Company, Long> {
Boolean existsByName(String name);
Boolean existsByRegCode(String regCode);
}

Существует несколько разных репозиториев для разных сущностей (Компания, Пользователь, Магазин), и все они имеют поле CountryId.

Теперь мне нужно добавить условие «AND CountryId =: CountryId» ко всем запросам во всех репозиториях, где параметр страны получает свое значение из некоторого файла конфигурации.

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

есть ли связь у юридического лица компании с юридическим лицом страны?

x86-64 17.09.2018 09:49

Страна - это просто поле в таблице компании. Я обновляю свой вопрос

Riho 17.09.2018 09:50

тогда это строка? Если я правильно понял ваш вопрос, вы можете попробовать: Boolean existsByNameAndCountry(String name, String country)

x86-64 17.09.2018 09:54

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

M. Deinum 17.09.2018 09:59
0
4
107
1

Ответы 1

Вы можете определить суперкласс для всех своих сущностей и добавить поле countryId к этому суперклассу и аннотировать с помощью @Where(clause = "countryId='id'").

@Where(clause = "countryId='id'")
public class Entity {...}

а также

public class Company extends Entity {...}

К сожалению, это допускает только статические значения: «Проблема с аннотацией @Where в том, что она позволяет нам указывать только статический запрос без параметров, и его нельзя отключить или включить по запросу».

Riho 17.09.2018 12:15

Ты прав. В случае использования спящего режима другим способом, который позволяет нам динамически изменять параметры, является AOP, который перехватывает запросы и включает / отключает фильтры на основе методов или классов: cyriltech.blogspot.com/2017/03/…

Jalal Sajadi 17.09.2018 12:41

Другие вопросы по теме