私は 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;
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;
@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;
}
}
アイテムリポジトリ:
import io.micronaut.data.model.Page;
import io.micronaut.data.model.Pageable;
import io.micronaut.data.repository.PageableRepository;
import knitwizzs.domains.Item;
import knitwizzs.dtos.ItemDTO;
public interface ItemRepository extends PageableRepository<Item, Long> {
Page<ItemDTO> findAllOrderByName(Pageable pageable);
}
これは私が得ている出力です:
{
"content": [
{
"name": "Item name one"
},
{
"name": "Item name two"
}
],
"pageable": {
"number": 0,
"sort": {
"sorted": false
},
"size": 100,
"offset": 0,
"sorted": false
},
"totalSize": 2,
"totalPages": 1,
"empty": false,
"size": 100,
"offset": 0,
"pageNumber": 0,
"numberOfElements": 2
}
では、ネストされたオファーの兆候はありませんか?
それでおしまい。私は Micronaut のデータを利用しているので、うまくいくだろうと思っていました。明らかに私は何かを逃した。
役立つ情報を事前にありがとうございます。