Вы можете сделать это следующим образом:
1.- Найти всех пользователей по ролям, используя Ключевые слова запроса репозитория
@Repository
public interface UserRepository extends JpaRepository<User, UUID> {
Set<User> findByRole(String role);
}
2.- Создать методвызывается getAllUsers
в UserService
и получает role value
с помощью @ Value :
@Service
public class UserService {
@Autowired
private UserRepository repository;
@Value("${query.parameters.role}")
private String role;
public Set<User> getAllUsers() {
return repository.findByRole(role);
}
}
Другой способ ответить на этот вопрос - реализовать пользовательскийSpEL
, поддерживаемый @Query
, вы можете посмотреть эту поддержку SpEL в Spring Data JPA
Тогда вы должны выполнить следующие шаги для вашего случая:
1.- Создайте класс ConfigProperties
, чтобы вы могли читать и получать application.properties
.
@Configuration
@PropertySource("classpath:application.properties")
@ConfigurationProperties(prefix = "query")
public class ConfigProperties {
private Parameters parameters;
// standard getters and setters
}
public class Parameters {
private String role;
// standard getters and setters
}
2.- Реализовать пользовательский EvaluationContextExtensionSupport
и ссылку на ConfigProperties
public class PropertyEvaluationContextExtension extends EvaluationContextExtensionSupport {
private final ConfigProperties configProperties;
public PropertyEvaluationContextExtension(final ConfigProperties configProperties) {
this.configProperties= configProperties;
}
@Override
public String getExtensionId() {
return "properties";
}
@Override
public ConfigProperties getRootObject() {
return this.configProperties;
}
}
3.- Создайте bean-компонент, который будет называться вашим кастомным PropertyEvaluationContextExtension
@Configuration
public class CustomConfig {
private final ConfigProperties configProperties;
public CustomConfig(final ConfigProperties configProperties) {
this.configProperties= configProperties;
}
@Bean
EvaluationContextExtensionSupport propertyExtension() {
return new PropertyEvaluationContextExtension(configProperties);
}
}
4.- Назовите query.parameters.role
в следующем формате: ?#{query.parameters.role}
@Query(value = "SELECT u FROM User u WHERE u.role = ?#{query.parameters.role}")
Set<User> getAllUsers();