#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, для каждого из вопросов, так как у каждого из них свои типы.
Возможно ли вообще такое?