Перфоманс метода getOne()

Имеется сущность Menu. Она выглядит примерно так:

// аннотации опущены
public class Menu {
    Integer id;
    Restaurant restaurant;
    List<Dish> dishes;
    LocalDate date;
}

Я хочу сделать для неё DTO, в котором вместо поля Restaurant restaurant будет Integer restaurantId, а вместо List<Dish> dishes будет List<Integer> dishIds. Но если я захочу переобразовать это DTO в реальный объект Menu (чтобы потом сохранить в DataJpa-репозиторий например, потому что DataJpa работает с реальными объектами), мне надо как-то вытащить все эти сущности по id.

Я предполагаю использовать для этого метод getOne() из JpaRepository. Однако меня волнует перфоманс этого метода. Он вообще обращается к БД? Насколько он дорог в использовании?


Ответы (1 шт):

Автор решения: Владимир Карсанов

Он вообще обращается к БД?

Не могу гарантировать, но исходя из общих соображений, думаю, что должен. Ведь, что значит "не обращаться в БД"? Это значит хранить кеш всей базы в оперативной памяти и грамотно управлять актуальностью его состояния. Я не верю в такой функционал по-дефолту. Такое вы только сами себе запилить можете.

использовать для этого метод getOne() из JpaRepository. Однако меня волнует перфоманс этого метода.

Если в базе всё стандартно и айдишник (как и положено) является первичным ключом, то ни о каких проблемах перфоманса, ИМХО, речи быть не может.

Нет, понятно, что если база и джава на разных машинах и время тратится на сеть и всё такое. Но в любом случае это обычная нагрузка. Если у нас не супер нагруженное приложение и мы не кешируем руками базу или её часть в оперативке, то ходить в базу мы не боимся. Поход в базу может оказаться дорогостоящим потому, что запрос криво составлен. Но к поиску по айди это отношения не имеет.

→ Ссылка