gpt4 book ai didi

java - Spring-boot API 双向创建/更新问题

转载 作者:行者123 更新时间:2023-12-02 03:29:07 25 4
gpt4 key购买 nike

因此,我在 Spring Boot 上使用 CRUD 构建了 API,由于实体的双向性质而出现了问题。

我可以通过应用程序(非 API)手动创建它,并且它会与子项和所有项一起出现。

但是,一旦 API 启动,我会尝试将其发布(以创建)如下所示的 JSON:

{
"idReserva": 1,
"comentarios": "",
"fechaIngreso": "0019-07-15",
"fechaSalida": "0019-10-30",
"cantidadDePersonas": 3,
"usuario": {
"idUsuario": 1,
"nombres": "test",
"apellidos": "test",
"contrasena": "1234",
"codUsuario": "USU01",
"email": "test@gmail.com",
"foto": ""
},
"pagos": [
{
"idPago": 1,
"tipo": "Efectivo",
"total": 1500
}
],
"habitaciones": [
{
"idHabitacion": 1,
"descripcion": "Habitación Ejecutiva",
"tipo": 3,
"numero": "5",
"codHabitacion": "HAB01",
"precio": "1500 dolares"
}
]
}

问题在于,在存储库内的“创建”方法中,我无法接收嵌套实体,它确实在数据库中创建了“保留”条目,但它没有给它它的子实体

    List<Pago> listPagos = new ArrayList<>();
for (Pago pago : reserva.getPagos()){
log.info(pago.getIdPago()+"");
pagoService.create(pago);
listPagos.add(pago);
}
reserva.setPagos(listPagos);

我尝试了类似上面的方法,从 json 中获取每个“pago”(付款)实体,然后创建它/将其添加到保留中,因为我需要它在数据库中包含其子付款的字段,但是当我记录实体时,我收到“null”,就好像它没有收到任何内容一样,是否需要任何特定的方式来获取嵌套实体?

最佳答案

好吧,经过几个小时的解决之后,我发现了这个问题。 API 本身缺少一些关键的东西,当您想要在资源 (api) 层内部保存时,在实际使用服务层 .save() 之前,您想要使用 For: 循环传递创建子实体的实例Json 中的每个实体都指向该子实体的一个实例,JPA 将自动创建它们,并将它们添加到父实体中。

示例:

for (Habitacion habitacion : reserva.getHabitaciones()){
habitacion.setReserva(reserva);
}
for (Pago pago : reserva.getPagos()){
pago.setReserva(reserva);
}
Usuario usuario = reserva.getUsuario();
usuario.setReserva(reserva);

(这是在资源层的 createReserva 方法内部)

关于java - Spring-boot API 双向创建/更新问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56895352/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com