使用 JPA 存储库将 JSON 数组保存到数据库中

Persisting JSON Array into Database using JPA Repository

我正在学习spring引导。作为学习的一部分,我正在使用 REST Web 服务创建发票应用程序的后端。这是我的 JSON 请求。

{
    "invoice": {
            "invoiceNumber":"KB123456",
            "custId":"123",
            "pricingId":"234",
            "empId":"456",
            "gstCode":"HSN1234",
            "invoiceSubTotal":"1234.00",
            "invoiceGst":"18%",
            "invoiceGstAmount":"123.45",
            "invoiceTotal":"1357.45",
        "invoiceLineItems": [
        {
            "invoiceLineNo":"KB123456-1",
            "invoiceLineDesc":"Des123",
            "invoiceQty":"2",
            "invoicePpu":"0.18",
            "invoiceGstCode":"HSN1235",
            "invoiceGstPercentage":"18%",
            "invoiceLineAmount":"123",
            "invoiceLineTaxAmount":"12",
            "invoiceLineTotalAmount":"135"
        },
        {
            "invoiceLineNo":"KB123456-2",
            "invoiceLineDesc":"Des124",
            "invoiceQty":"4",
            "invoicePpu":"0.17",
            "invoiceGstCode":"HSN1235",
            "invoiceGstPercentage":"18%",
            "invoiceLineAmount":"126",
            "invoiceLineTaxAmount":"14",
            "invoiceLineTotalAmount":"140"

        }
        ]

    }
}

invoiceLineItems 最多可容纳 15 个对象。

这是我的实体发票和 InvoiceLineItems

Invoice.Java

@Entity
public class Invoice {

    @Id
    @GeneratedValue
    private long invoiceId;
    private String invoiceNumber;
    private long custId;
    private long pricingId;
    private long empId;
    private String gstCode;
    private String invoiceSubTotal;
    private String invoiceGst;
    private String invoiceGstAmount;
    private String invoiceTotal;

    @Transient
    @OneToMany(mappedBy="invoice")
    private List<InvoiceLineItems> invoiceLineItems;
}

InvoiceLineItems.Java

@Entity
public class InvoiceLineItems {

    @Id
    @GeneratedValue
    private long invoiceLineId;
    private String invoiceNumber;
    private String invoiceLineNo;
    private String invoiceLineDesc;
    private String invoiceQty;
    private String invoicePpu;
    private String invoiceGstCode;
    private String invoiceGstPercentage;
    private String invoiceLineAmount;
    private String invoiceLineTaxAmount;
    private String invoiceLineTotalAmount;

    @ManyToOne
    private Invoice invoice;
}

这是我的 REST 控制器

@RestController
public class InvoiceResourceController {

    @Autowired
    InvoiceRepository invoiceRepository;
    InvoiceLineRepository invoiceLineRepository;

    @PostMapping("/invoice")
    public ResponseEntity<Invoice> createInvoice(@RequestBody Invoice invoice) {

        List<InvoiceLineItems> invoiceLineItemsList = invoice.getInvoiceLineItems();




        Invoice savedInvoice = invoiceRepository.save(invoice);

    /*  for (int i = 0; i < invoiceLineItemsList.size(); i++) {
            InvoiceLineItems invLn = new InvoiceLineItems();
            invLn = invoiceLineItemsList.get(i);

            invoiceLineRepository.save(invLn);

        } */



        URI location = ServletUriComponentsBuilder.fromCurrentRequest().path("/{id}")
                .buildAndExpand(savedInvoice.getInvoiceNumber()).toUri();

        return ResponseEntity.created(location).build();
    }

}

现在,我有两个 table 发票和 Invoice_Line_Items 由 Spring Boot 创建。我能够将 Invoice 实体持久化到 Invoice table,但我正在努力从请求中获取 InvoiceLineItems 数组对象并持久化到 Invoice_Line_Items table.

如有任何帮助,我们将不胜感激。

解决了。

@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "invoiceNumber")
private List<InvoiceLineItems> invoiceLineItems;