【问题标题】:Spring boot using Postman returning null when making a POST with foreign key使用外键进行 POST 时使用 Postman 返回 null 的 Spring Boot
【发布时间】:2020-11-15 15:13:48
【问题描述】:

我正在使用 POSTMAN 并尝试使用 Spring Boot 进行发布请求。我在“paciente”和“Operativo”之间建立了 OneToOne 关系。当我尝试使用 Postman 创建一个“Operativo”实例时,与该“Operativo”关联的所有“paciente”属性都为空。不知道是模型关系的问题,还是控制器的问题。

“paciente”模型中的关系

@Entity
@Table(name = "Paciente")
public class paciente {
    @Id
    private long rut;

    private String nombre;
    private String nacionalidad;
    private String sexo;
    private String fecha_na;
    private String domicilio;
    private String diagnostico;
    private String telefono;
    private String gravedad;
    @OneToOne(mappedBy = "paciente")
    private Operativo operativo;
   

“Operativo”模型中的关系

@Entity
@Table(name = "Operativo")
public class Operativo{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;

    private String dia;
    private String hora;
    private String equipamiento;
    private String equipo;
    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "paciente", referencedColumnName  = "rut")

    public paciente paciente;

操作控制器

@RestController
@CrossOrigin
@RequestMapping("/api/Operativo")

public class OperativoController{
    @Autowired
    private operativoService operativoService;
    @GetMapping("")
    public Iterable<Operativo> getOperativos(){
        return operativoService.listAll();
    }
    @PostMapping("")
    public ResponseEntity<Operativo> addOperativo (@RequestBody Operativo operativo){
        Operativo ope= operativoService.saveOrUpdateOperativo(operativo);
        return new ResponseEntity<Operativo>(ope,HttpStatus.CREATED);
    }
    
}

运营服务

@Service
public class operativoService{
    @Autowired
    private OperativoRepository operativoRepository;
    public Operativo saveOrUpdateOperativo(Operativo operativo){
        return operativoRepository.save(operativo);
    }
    public Iterable<Operativo> listAll(){
        return operativoRepository.findAll();
    }
    public  void deleteOperativo(int id){
        operativoRepository.deleteById(id);
    }
    public Operativo getOperativoById(int id){
        return operativoRepository.findById(id);
    }
    
}

POSTMAN 帖子输入

{
    "id" : 1,
    "equipamiento" : "o",
    "equipo" : "a",
    "hora":"a",
    "dia": "a",
    "paciente": {"rut":123123}
}

邮递员输出

{
    "id": 1,
    "dia": "a",
    "hora": "a",
    "equipamiento": "o",
    "equipo": "a",
    "paciente": {
        "rut": 123123,
        "nombre": null,
        "nacionalidad": null,
        "sexo": null,
        "fecha_na": null,
        "domicilio": null,
        "diagnostico": null,
        "telefono": null,
        "gravedad": null
    }
}

【问题讨论】:

    标签: java spring hibernate postman


    【解决方案1】:

    最后我解决了我的问题,在“Operativo”关系上更改了这行代码

     @JoinColumn(name = "paciente", referencedColumnName  = "rut")
    

    @JoinColumn(name = "rut")
    

    似乎“名称”属性应该匹配我引用的外键的名称,而不是引用的实体的名称。

    现在使用这个 POSTMAN 输入。

    {"id":1 ,
    "dia":"asd",
    "hora":"asd",
    "equipamiento":"asd",
    "equipo":"asd",
    "paciente":{"rut":19}}
    

    我得到以下输出

    {
        "id": 1,
        "dia": "asd",
        "hora": "asd",
        "equipamiento": "asd",
        "equipo": "asd",
        "paciente": {
            "rut": 19,
            "nombre": "asd",
            "nacionalidad": "asd",
            "sexo": "asd",
            "fecha_na": "asd",
            "domicilio": "asd",
            "diagnostico": "asd",
            "telefono": "asd",
            "gravedad": "asd"
        }
    }
    

    还删除了“Operativo”类中的 @OneToOne(cascade = CascadeType.ALL),因为它导致当我创建“Operativo”时,它还会使用给定数据创建“Paciente”实体。因此,在创建“Operativo”时,如果我在 JSON 中只给它"paciente":{"rut":19},它将创建一个只有该属性的“Paciente”,而其他所有属性都将为空。

    【讨论】:

      【解决方案2】:

      1.当我们处于一对一关系时,您不需要 referencedColumnName 的第一件事。 2.您的邮递员输入要为“pacente”提供。上面我们只看到一列数据。您必须为您需要的所有必要值提供输入

      【讨论】:

      • 感谢您的回答,那我如何证明外键有效?我的意思是我只想给它外键并接收其他属性
      • @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "operativo_id") private Operativo operator;
      猜你喜欢
      • 2018-10-02
      • 2021-12-18
      • 1970-01-01
      • 2017-11-17
      • 2020-04-22
      • 1970-01-01
      • 2021-12-04
      • 2020-05-23
      • 2020-01-24
      相关资源
      最近更新 更多