ResultTransformer как сделать вывод правильного json?

Всем привет! В общем у меня следующая проблема, для наглядности загружу код:

@Repository
public class QuestionDaoDtoImpl extends AbstractDAOImpl<QuestionDto, Long> implements 
QuestionDaoDto {

@SuppressWarnings("unchecked")
@Override
public List<QuestionDto> getListQuestionDto() {
    List<QuestionDto> questionDto = new ArrayList<>();
    try {
    questionDto = entityManager.createQuery("SELECT " +
                "q.id, " +
                "q.title, " +
                "q.user.fullName, " +
                "q.user.reputationCount, " +
                "q.viewCount, " +
                "q.countValuable, " +
                "q.persistDateTime, " +
                "t.id, " +
                "t.name, " +
                "t.description " +
                "FROM Question q JOIN q.tags t")
                .unwrap(Query.class)
                .setResultTransformer(new ResultTransformer() {
                                          @Override
                                          public Object transformTuple(Object[] objects, String[] strings) {
                                              TagDto tagDto = TagDto.builder()
                                                      .id((Long) objects[7])
                                                      .name((String) objects[8])
                                                      .description((String) objects[9])
                                                      .build();
                                              List<TagDto> tagDtoList = new ArrayList<>();
                                              tagDtoList.add(tagDto);
                                              return QuestionDto.builder()
                                                      .id((Long) objects[0])
                                                      .title((String) objects[1])
                                                      .username((String) objects[2])
                                                      .reputationCount((Integer) objects[3])
                                                      .viewCount((Integer) objects[4])
                                                      .countValuable((Integer) objects[5])
                                                      .persistDateTime((LocalDateTime) objects[6])
                                                      .tags(tagDtoList)
                                                      .build();
                                          }

                                          @Override
                                          public List transformList(List list) {
                                              return list;
                                          }
                                      })
                .getResultList();

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

[{"id":2,"title":"test title","username":"Name","tags":[{"id":1,"name":"java","description":"java the best"}],"reputationCount":12,"viewCount":1,"countAnswer":null,"countValuable":1,"persistDateTime":"2020-05-06T17:31:31"},{"id":2,"title":"test title","username":"Name","tags":[{"id":2,"name":"sql","description":"i love sql"}],"reputationCount":12,"viewCount":1,"countAnswer":null,"countValuable":1,"persistDateTime":"2020-05-06T17:31:31"}]

Как можно увидеть я хочу получить один вопрос и список тегов к нему, но РезалтТрансформер устроен таким образом что он вызывается каждый раз пока есть что-то в таблице Я понимаю, что можно реализовать некоторую логику в методе transformList, но пока не понимаю как можно это сделать, чтобы json отображался в виде - 1 вопрос и к нему лист тегов, если есть идеи не стесняйтесь подскажите пожалуйста :)


Ответы (0 шт):