Один ко многим двунаправленным - PullRequest
0 голосов
/ 21 марта 2020

У меня проблемы с отношением «многие к одному», потому что я неправильно показываю сущность.

Может ли кто-нибудь мне помочь?

Я прикрепил свой код.

Счет

@Entity
@Table(name = "invoices")
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class,property = "id")
public class Invoice {

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    private String clave;

    @OneToMany(mappedBy = "invoice", cascade = CascadeType.REMOVE, fetch = FetchType.LAZY, orphanRemoval = true)
    private List<InvoiceLine> lines;

InvoiceLines

@Entity
@Table(name = "invoice_lines")
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class,property = "id")
public class InvoiceLine {
    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

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

    @ManyToOne
    @JoinColumn(name = "invoice_id", referencedColumnName = "id", nullable = false)
    private Invoice invoice;

Контроллер

@RestController
public class InvoiceController{

    @Autowired
    private InvoiceRepository invoiceRepository;

    @Autowired
    private InvoiceLineRepository invoiceLineRepository;

    @GetMapping("/")
    public Iterable<Invoice> findAllnvoices(){
        return invoiceRepository.findAll();
    }

    @GetMapping("/invoiceLine")
    public Iterable<InvoiceLine> findAllInvoiceLine(){
        return invoiceLineRepository.findAll();
    }

    @GetMapping("/{id}")
    public Optional<Invoice> findTagByInvoice(@PathVariable("id") Long id){
        return invoiceRepository.findById(id);
    }

}

Ответ когда я вызываю конечную точку invoiceLine:

[
    {
        "id": 1,
        "product": "Tag1-ES",
        "invoice": {
            "id": 1,
            "clave": "Tag1",
            "lines": [
                1,
                {
                    "id": 2,
                    "product": "Tag1-FR",
                    "invoice": 1
                },
                {
                    "id": 3,
                    "product": "Tag1-IT",
                    "invoice": 1
                }
            ]
        }
    },
    2,
    3
]

Мой вопрос: почему неправильно отображается ответ сущности ManyToOne, если у меня все верно?

1 Ответ

0 голосов
/ 22 марта 2020

Если я правильно понял вашу проблему после комментариев, вас беспокоят отображаемые «цифры». Эти числа используются, чтобы избежать бесконечной рекурсии, и они относятся к сущностям, которые уже были отображены.

Таким образом, число "2" было бы на самом деле так:

{
  "id": 2,
  "product": "Tag1-FR",
  "invoice": 1
}

Если представление подобное не используется, тогда весь счет и его элементы будут повторяться бесконечно.

Существует несколько различных способов избежать такого поведения, например, использование @JsonIgnore или @JsonBackReference и @JsonManagedReference. Взгляните на это объяснение об их различиях

Разница между @JsonIgnore и @JsonBackReference, @ JsonManagedReference

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...