Как реализуются и выполняются пользовательские методы в весенних данных jpa? - PullRequest
0 голосов
/ 08 июня 2018

Я использую Spring Data JPA для своего проекта, и у меня есть следующие фрагменты кода:

Мой репозиторий:

@Repository
@Transactional
public interface StudentRepository extends PagingAndSortingRepository<Student, Long> {

  List<Student> findByIdIn(List<Long> ids);

}

, и моя сущность:

@Entity
public class Student implements Serializable {

  private static final long serialVersionUID = 1L;

  private Long id;

  // other fields
  // getters/setters

}

Где-то в моем классе обслуживания у меня есть

@Autowired
StudentRepository  studentRepository;

, а затем я вызываю findByIdIn из моего уровня обслуживания, например:

studentRepository.findByIdIn(listOfIds);

Метод findByIdIn (listOfIds) работает отлично, и всеработает как положено.

Я знаю, что реализация метода findByIdIn () обеспечивается пружинными данными jpa.

Но я не могу понять, где присутствует его реализация?Какова его реализация?Такие методы генерируются во время выполнения в зависимости от имени метода?Если да, то как они генерируются и выполняются динамически?

Спасибо!

1 Ответ

0 голосов
/ 08 июня 2018

Вы можете немного покопаться в ядре кода Spring, чтобы увидеть, как он работает (https://github.com/spring-projects/spring-data-commons/tree/master/src/main/java/org/springframework/data/repository),, но в основном это синтаксический анализ методов интерфейса в HQL во время запуска.

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

...