У вас может быть отдельный класс обслуживания, например, такой:
public class SomeService {
private Map<String, User> users;
@Autowired
private UserRepository userRepository;
public SomeService() {
updateUsers();
}
public void updateUsers() {
users = userRepository.findAll().stream().collect(Collectors.toMap(User::getName, u -> u);
}
public boolean isNameTaken(String name) {
return users.contains(name);
}
//or
public User getUserByName(String name) {
return users.get(name);
}
}
Вы можете вызывать метод updateUsers()
всякий раз, когда ваш репозиторий создает или обновляет пользователя, чтобы карта оставалась актуальной.
Это должно быть достаточно эффективно, если вы беспокоитесь о производительности.