WedX - журнал о программировании и компьютерных науках

Как сопоставить ссылки на объекты в структуре карты с помощью JHipster?

Допустим, вы создаете приложение JHipster для блога с сообщениями, используя сценарий JDL, подобный этому, и хотите иметь BlogDTO, который показывает сообщения внутри него (и BlogDTO, который показывает комментарии, которые есть у каждого сообщения):

entity Blog {
    creationDate Instant required
    title String minlength(2) maxlength(100) required
}

entity Post {
    creationDate Instant required
    headline String minlength(2) maxlength(100) required
    bodytext String minlength(2) maxlength(1000) required
    image ImageBlob
}

entity Comment {
    creationDate Instant required
    commentText String minlength(2) maxlength(1000) required
}


// RELATIONSHIPS:
relationship OneToMany {
    Blog to Post{blog required}
    Post{comment} to Comment{post(headline) required}
}

// Set pagination options
paginate all with pagination

// DTOs for all
dto * with mapstruct

// Set service options to all except few
service all with serviceClass

// Filtering
filter *

Jhipster создаст объекты вашего блога, публикации и комментария с их DTO и сделает предположение, что вы не хотите заполнять блог сообщениями или сообщения комментариями, поэтому ваш BlogMapper будет выглядеть следующим образом:

@Mapper(componentModel = "spring", uses = {})
public interface BlogMapper extends EntityMapper<BlogDTO, Blog> {

    @Mapping(target = "posts", ignore = true)
    Blog toEntity(BlogDTO blogDTO);


    default Blog fromId(Long id) {
        if (id == null) {
            return null;
        }
        Blog blog = new Blog();
        blog.setId(id);
        return blog;
    }
}

с BlogDTO следующим образом:

public class BlogDTO implements Serializable {

    private Long id;

    @NotNull
    private Instant creationDate;

    @NotNull
    @Size(min = 2, max = 100)
    private String title;
//GETTERS, SETTERS, HASHCODE, EQUALS & TOSTRING

Может ли кто-нибудь помочь изменить код, чтобы BlogDTO отображал сообщения (а PostDTO отображал комментарии). Спасибо

ПД: потому что я изменил аннотацию, включив в нее класс PostMapper @Mapper(componentModel = "spring", uses = {PostMapper.class})

И @Mapping(target = "posts", ignore = false) в FALSE, но это не работает. Пример API (Swagger) выглядит нормально, но PostDTO имеет значение null (даже если данные есть).

27.07.2018

Ответы:


1

Добавьте Set<PostDTO> posts; в свой BlogDTO и Set<CommentDTO> comments; в свой PostDTO. Также добавьте геттеры и сеттеры для этих полей в файлах DTO. Затем в ваших картографах убедитесь, что BlogMapper использует PostMapper, а PostMapper использует CommentMapper.

Вам также может потребоваться настроить аннотации кэширования в поле posts в Blog.java и поле comments в Post.java в соответствии с вашим вариантом использования. При использовании NONSTRICT_READ_WRITE может возникать задержка при обновлении кеша, что приводит к устаревшим данным, возвращаемым API.

31.07.2018
  • Поэтому, если вы испытываете задержку, @Cache(usage = CacheConcurrencyStrategy.NONE) будет работать. Вы можете проверить это: github.com/ruddell/jhipster-examples/commit/ и не забудьте изменить ToString в Post и Comment, чтобы увидеть результаты в API (иначе вы получите пустой массив). Спасибо, Джон. 31.07.2018
  • Некоторая информация о @Cache на случай, если она вам понадобится для понимания проблемы: baeldung.com/hibernate -кэш второго уровня 31.07.2018
  • Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]