Jhispter Repository Custom @Query - PullRequest
       33

Jhispter Repository Custom @Query

1 голос
/ 28 февраля 2020

У меня есть 2 таблицы в моей базе данных, ProfesorInfo и StudentInfo в отношениях один ко многим. Я хочу создать пользовательский запрос, чтобы все студенты, имеющие отношение к определенному профессору, получали его идентификатор. Что-то вроде:

@SuppressWarnings("unused")
@Repository
public interface StudentInfoRepository extends JpaRepository<StudentInfo, Long> {

    @Query("SELECT * FROM StudentInfo WHERE ProfesorID = profesorId")
    List<StudentInfo> findAllByProfesorID(Long profesorId);

Кажется, @Query не работает. Почему это так и как я могу заставить его работать?

1 Ответ

4 голосов
/ 28 февраля 2020

Я не думаю, что вы правильно используете параметр запроса, он должен выглядеть примерно так:

import org.springframework.data.repository.query.Param;
... 
@SuppressWarnings("unused")
@Repository
public interface StudentInfoRepository extends JpaRepository<StudentInfo, Long> {

    @Query("SELECT s FROM StudentInfo s WHERE s.ProfesorID = :profesorId")
    List<StudentInfo> findAllByProfesorID(@Param("profesorId") Long profesorId);

Двоеточие говорит JPA, что следующее слово - это переменная, которую следует заменить значением @Param с тем же именем.

Представьте себе @Query как необходимость перемещаться, загружать и фильтровать объекты непосредственно в ваших Java объектах. Я говорю это потому, что имя вашего поля ProfesorID, начинающееся с заглавной буквы "D", выглядит странно. Если это поле имеет имя profesorID в вашей сущности java, тогда оно должно называться так же, когда вы хотите получить к нему доступ в запросе jpa.

Если вам нужна дополнительная информация об этом, здесь - отличное руководство с примерами.

...