@ManyToOne 和 @OneToMany 在 springboot 中添加和检索问题

问题描述 投票:0回答:1

我在 Spring Boot JPA 应用程序中遇到与 Owner 和 Car 实体之间的关系相关的问题。当尝试将新车与现有所有者关联或添加新所有者与一组汽车时,会出现此问题。虽然车主和汽车已成功添加到数据库中,但 Car 表中的 Owner_id 设置为 null,当尝试检索车主时,我没有得到任何响应。

任何人都可以帮助找到解决方案吗:我的目标是添加拥有汽车的车主,检索拥有汽车的车主,并且在插入具有现有车主的汽车时,它也会被检索到。

这些是我的类和 json 负载:

Car.java类

@Entity
@Table(name="Car")
@Data
public class Car {

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

    @Column(name = "name")
    private String car_name;

    @Column(name = "model")
    private String Lmodel;

    @Column(name = "firstY")
    private String firsty;

    @ManyToOne()
    @JoinColumn(name="owner_id", referencedColumnName = "owner_id")        
    private Owner owner;

Owner.java类

@Entity
@Table(name="Owner")
@Data
public class Owner {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "owner_id", nullable = false)
    private Long id;

    @Column(name = "first_name")
    private String first_name;

    @Column(name = "last_name")
    private String last_name;

    @Column(name = "address")
    private String address;

    @OneToMany(targetEntity = Car.class, mappedBy = "owner", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<Car> car;

}

主控制器

package com.example.product.controllers;

import com.example.product.model.Car;
import com.example.product.model.CarService;
import com.example.product.model.Owner;
import com.example.product.model.OwnerService;
import jakarta.transaction.Transactional;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@AllArgsConstructor
@RestController
public class MainController {

    @Autowired
    private CarService carService;

    @Autowired
    private  OwnerService ownerService;

    @Transactional
    @DeleteMapping(value = "/Owner/{id}")
    public void deleteOwner(@PathVariable Long id){
        ownerService.deleteOwnerById(id);
    }

    @PostMapping(value = "/Owner")
    public void addOwner(@RequestBody Owner owner){
        ownerService.addOwner(owner);
    }

    @GetMapping(value = "/Owner/{id}")
    public Owner getOwner(@PathVariable Long id){
        return  ownerService.findOwnerById(id);
    }

    @PutMapping(value = "/Owner")
    public void updateOwner(Long id, String firstName, String lastName, String email, Car car){
        ownerService.updateOwner(id,firstName,lastName,email,car);
    }

    @GetMapping(value = "/Owners")
    public List<Owner> getAllOwners(){ return ownerService.getAllOwners();}

    @Transactional
    @DeleteMapping (value = "/Car/{id}")
    public void deleteCar(@PathVariable Long id){
        carService.deleteCarById(id);
    }

    @PostMapping(value = "/Car")
    @ResponseStatus(HttpStatus.CREATED)
    public void addCar(@RequestBody  Car car){
        carService.addCar(car);
    }

    @GetMapping(value = "/Car/{id}")
    public Car getCar(@PathVariable Long id){
        return  carService.getCarById(id);
    }

    @PutMapping(value = "/Car")
    public void updateCar (Long id,String firsty,String name,String model){
        carService.updateCarById(firsty,name,model,id);
    }

    @GetMapping(value="/Cars")
    public List<Car> getAllCars(){
        return carService.getAllCars();
    }
}

Json 负载将汽车添加到数据库中

{
"car_name": "Toyota",
"lmodel": "Camry",
"firsty": "2023",
"owner": {
  "id": 1
    }
}

Json 负载将所有者添加到数据库中

{
  "first_name": "John",
  "last_name": "Doe",
    "address": "123 Main Street",
  "car": [
    {
      "car_name": "BMW",
      "lmodel": "Model 3",
      "firsty": "2022"            },
    {
      "car_name": "Mercedes",
      "lmodel": "C-Class",
      "firsty": "2021"      
        }
  ]
}
java spring-boot spring-mvc spring-data-jpa spring-restcontroller
1个回答
0
投票

看来,Car类中对Owner类的引用可能不正确。

请考虑使用以下代码进行正确引用。

public class Owner {
  @OneToMany(mappedBy="owner", cascade = CascadeType.ALL, orphanRemoval = true)
  private List<Car> car;
}

public class Car {
  @ManyToOne
  @JoinColumn(name="owner_id", nullable=false)
  private Owner owner;
}
© www.soinside.com 2019 - 2024. All rights reserved.