我在 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"
}
]
}
看来,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;
}