Spring JPA проекционная задача с подзапросом - PullRequest
0 голосов
/ 13 апреля 2020

Я использую проекции JPA, но не получается, когда мой запрос содержит подзапрос. Например:

public class Student {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "student_id")
    private Long id;

    private String name;

}

Вот интерфейс для проекции:

public interface StudentProjection {
    Integer getId();
}

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

@Query("select s from Student s where s.id = 88831")
List<StudentProjection> findProjections();

С этим кодом все работает нормально, и репо возвращается список EleveProjection.

Но если я изменю запрос на этот (например, выборку идентификатора по подвыборке - просто для примера):

@Query("select s from Student s where s.id = (select max(88831) from Student)")
List<StudentProjection> findProjections();

... method findProjection () возвращает список org.springframework.data.jpa.repository.query.AbstractJpaQuery $ TupleConverter $ TupleBackedMap

И, очевидно, невозможно выполнить getId ( ) на этом объекте (исключение выдается).

Это похоже на ошибку в данных Spring JPA. В настоящее время я использую версию 2.2.4.RELEASE.

Есть идеи, как использовать подзапросы с проекциями JPA?

Спасибо

1 Ответ

0 голосов
/ 13 апреля 2020

Содержимое @Query соответствует Jpql spe c, поэтому речь не идет о данных о весне.

Попробуйте это @Query("select s from Student s where s.id in (select max(88831) from Student)") List<StudentProjection> findProjections();

AFAIK. Вы можете использовать пункты exists и in с подзапросами в jpql ...

...