Spring Data Возвращаемый тип - абстрактный класс или ошибка интерфейса. - PullRequest
0 голосов
/ 12 февраля 2019

У меня глупый вопрос.Я не понимаю, почему мой метод Spring Data Repository, использующий Projection, генерирует эту ошибку компиляции.

У меня есть класс репозитория

@Repository
public interface MyClassRepository extends JpaRepository<MyClass, Long> {
  Page<MyProjection> getResultsByParam(@Param("param") Long personId,
                                                 Pageable pageable, Sort sort);
}

и Projection (у меня большой связанный с Hibernate объект,из которого я хочу только несколько полей)

public interface MyProjection {
  Type getType();

  Status getStatus();

  SubItem getDocument();

  interface SubItem {
    String getName();
  }
}

Когда я пытаюсь вызвать метод из службы, я получаю

error: The return type is an abstract class or interface. Provide a non abstract / non interface result type or a factory method.

Я вызываю службу как это, где ошибка компиляцииэто.

myClass.getResultsByParam(param, page, sort)

Я совершенно уверен, что у меня здесь что-то очень простое неправильно ...

1 Ответ

0 голосов
/ 12 февраля 2019

Данные Spring автоматически генерируют код для выполнения этого интерфейса репозитория.Этот код будет содержать код, создающий объект результата.Чтобы иметь возможность создать объект результата, объект должен быть инстанцируемым;абстрактные классы и интерфейсы не являются.

Вы должны изменить свой метод интерфейса на что-то вроде

Page<MyProjectionImpl> getResultsByParam(@Param("param") Long personId,
                                             Pageable pageable, Sort sort);

, где MyProjectionImpl - это @Entity, который имеет конструктор по умолчанию и методы получения / установкидля свойств, поэтому Spring Data может заполнить их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...