Повторный доступ к БД для отдельных объектов намного медленнее, чем массовый выбор. Как кэшировать результат массового выбора в кеш, а затем обращаться к нему индивидуально?
Например, у меня есть сущность Employee:
public class Employee {
private Integer id;
}
И у меня есть репозиторий, который может получить к нему доступ либо с помощью массового выбора, либо индивидуально по идентификатору:
public class EmployeeRepository {
public Map<Integer, Employee> retrieveByEmployeeIds(List<Integer> ids) {
// impl
}
public Employee retrieveByEmployeeId(Integer id) {
// impl
}
}
Как мне реализовать это так, чтобы при вызове retrieveByEmployeeId(Integer id)
он проверял тот же кеш, что и retrieveByEmployeeIds(List<Integer> ids)
, и если он не существует, он делал вызов БД, а также снова сохранял этот кеш с идентификатором?