Проблема с Микронавтом, возвращающая простую структуру отношений «многие ко многим» json - PullRequest
0 голосов
/ 25 апреля 2020

(

Я новичок в Micronaut, и я следовал документации, чтобы настроить простое приложение REST. Я думал, что начну с простого отношения «многие ко многим». Казалось бы, все работающие. Таблицы базы данных генерируются при запуске правильно, и конечная точка возвращает элементы с возможностью просмотра, но НЕ вложенный список предложений, даже если я включаю аннотацию извлечения с нетерпением. Что мне не хватает? :-( Я не могу понять почему.

Вот что у меня есть ...

Элемент контроллера:

@Get(value = "/{?args*}")
    public Page<ItemDTO> list(@Valid Pageable args) {
        return itemRepository.findAllOrderByName(Pageable.from(args.getNumber(), args.getSize(), args.getSort() ));
    }

Элемент объекта:

@Entity
@Table(name = "item")
public class Item {

    public Item() {}

    public Item(@NotNull String name) {
        this.name = name;
    }

    public static ItemDTO toDTO(Item item) {
        return new ItemDTO(item);
    }

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Version
    private Long version;

    @NotNull
    @Column(name = "name", nullable = false, unique = true)
    private String name;

    @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(
            name = "item_offer",
            joinColumns = @JoinColumn(name = "item_id"),
            inverseJoinColumns = @JoinColumn(name = "offer_id"))
    private Set<Offer> offers = new HashSet<>();

    public Long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public Set<Offer> getOffers() {
        return offers;
    }

    public Item setOffers(Set<Offer> offers) {
        this.offers = offers;
        return this;
    }

    public Item addOffer(Offer offer) {
        offers.add(offer);
        offer.getItems().add(this);
        return this;
    }

}

Элемент DTO:

@Introspected
public class ItemDTO {

    @NotNull
    private String name;

    @JsonIgnore
    private Set<OfferDTO> offers = new HashSet<>();

    public ItemDTO() {
    }

    public ItemDTO(String name) {
        this.name = name;
    }

    public ItemDTO(Item item) {
        this.name = item.getName();
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

Объект предложения:

@Entity
@Table(name = "offer")
public class Offer {

    public Offer() { }

    public Offer(String name) {
        this.name = name;
    }

    public static OfferDTO toDTO(Offer offer) {
        return new OfferDTO(offer);
    }

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Version
    private Long version;

    @Column(name = "name", nullable = false, unique = true)
    private String name;

    @JsonIgnore
    @ManyToMany(mappedBy = "offers", fetch = FetchType.EAGER)
    private Set<Item> items = new HashSet<>();

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Long getVersion() {
        return version;
    }

    public void setVersion(Long version) {
        this.version = version;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Set<Item> getItems() {
        return items;
    }

    public void setItems(Set<Item> items) {
        this.items = items;
    }
}

Предложение DTO:

@Introspected
public class OfferDTO {

    @NotNull
    private String name;

    public OfferDTO() {
    }

    public OfferDTO(String name) {
        this.name = name;
    }

    public OfferDTO(Offer offer) {
        this.name = offer.getName();
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

Вот и все. Поскольку я использую данные Micronaut, я предполагал, что это будет работать. Очевидно Я что-то пропустил.

Заранее благодарю за любую полезную информацию.

...