Как выполнить проекцию dto для унаследованного класса с различными подклассами данных spring?

#java #spring-data-jpa #dto

Вопрос:

Я работал над проектом и пытался выполнить проекцию DTO для своего базового класса, но у меня возникла проблема.

Вот мои сущности:

 @Entity @Table(name = "QUESTION") @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(discriminatorType = DiscriminatorType.STRING) @DiscriminatorValue("DESCRIPTIVE") public class Question extends BaseEntitylt;Longgt; {  @Column(name = "TITLE",  nullable = false) private String title;  @Column(name = "QUESTION_BODY",  nullable = false) private String questionBody;  @Column(name = "QUESTION_TYPE",  nullable = false) private QuestionType questionType; }  

И сущность TestQuestion, которая расширяет сущность базового вопроса:

 @Entity @DiscriminatorValue("TEST") public class TestQuestion extends Question {  @OneToMany(mappedBy = "testQuestion",  cascade = CascadeType.ALL,  orphanRemoval = true) private Setlt;Optiongt; options;  @OneToOne(cascade = CascadeType.ALL) @JoinColumn(name = "RIGHT_OPTION_ID") private Option rightOption;  }  

Теперь у меня есть репозиторий базовых вопросов, расширяющий JpaRepository, в котором есть метод findAll:

 public interface QuestionRepository extends JpaRepositorylt;Question, Longgt; {  @Query("select tq from Test t join t.questions tq where t.id = :testId ") Listlt;Questiongt; fetchTestQuestions(Long testId); }  

Когда я получаю все вопросы, так как у меня есть api rest, а сущность вопроса имеет все остальные атрибуты с отношениями ToMany, я получаю рекурсивный JSON, который является беспорядком! Я попытался использовать @JsonIgnore, но это не сработало, поэтому я решил использовать проекцию DTO.

Проблема в том, что я не знаю, как выполнить проекцию dto, чтобы вызвать конструктор каждого из моих DTO, таких как QuestionDTO и TestQuestionDTO, для каждого из вопросов, так как у каждого из них свои типы.

Возможно ли вообще такое?