Как findById и подобные методы работают в Spring? - PullRequest
0 голосов
/ 28 января 2019

В эти дни я пытаюсь научиться внутренней обработке JPA и Spring.

У меня путаница с функциями репозитория, такими как findById(), findNameById() и т. Д.

  1. Как работают эти функции, попадают ли они в базу данных при каждом вызове?Скажем, если будет реализовано следующее:

    for(loop 1million ids) {SomeRepo.findById(Long Id);}

Будет ли база данных поражена 1 миллион раз?

И если @Query используется для простого вызова базы данных, скажем, чтобы получить идентификаторы на основе имени, как это будет работать в отношении вызова и обработки БД?

1 Ответ

0 голосов
/ 28 января 2019

Если вы выполняете вызов БД в цикле for, он достигнет 1 млн. ДБ, и фреймворк не сможет этого избежать, если вы не используете кеш.Вместо этого следует использовать for(loop 1million ids){ SomeRepo.findById(Long Id);}

. Вы должны использовать findByIdIn(List<long> ids) и сделать один вызов дб (при необходимости используйте пагинацию идентификаторов)

@Query сделать то же самое, вы можете использовать то, что вывроде, но может случиться, что имя метода слишком длинное, например:

List<Person> findByPersonAddressNameAndPersonAddressNumberOrderByPersonAddressNameDesc(String addressName, Long addressNumber)

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

  @Query(from Person where person.address.name = :name and person.address.number = :number order by person.address.number desc);
  public List<Person> findByAddressAndNumber(String name, Long number)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...