(
Я новичок в 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, я предполагал, что это будет работать. Очевидно Я что-то пропустил.
Заранее благодарю за любую полезную информацию.