如何解决@OneToMany 的错误使用返回空列表
我有两个模型类:
拥有所有者字段的汽车:
import lombok.Data;
import javax.persistence.*;
@Entity
@Data
public class Car {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String carBrand;
private String modelOfCar;
private String gearBox;
private int yearProduction;
private int mileage;
private String status;
@ManyToOne
@JoinColumn(name = "owner_id")
private Owner owner;
}
和拥有汽车领域的所有者
@Entity
@Data
public class Owner implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nameOfOwner;
private String surnameOfOwner;
@OnetoMany(mappedBy = "owner")
private List<Car> cars = new ArrayList<>()
public void addCarToOwner(Car car) {
cars.add(car);
}
}
我尝试将一些示例数据添加到此数据中的嵌入式 h2 DB:
Car car1 = new Car();
car1.setCarBrand("asd");
car1.setModelOfCar("asd");
car1.setGearBox("asd");
car1.setYearProduction(22018);
car1.setMileage(321000);
car1.setStatus("Available");
Car car2 = new Car();
car2.setCarBrand("asd");
car2.setModelOfCar("asd");
car2.setGearBox("asd");
car2.setYearProduction(2011);
car2.setMileage(6801020);
car2.setStatus("Available");
Owner owner1 = new Owner();
owner1.setNameOfOwner("asd");
owner1.setSurnameOfOwner("asd");
owner1.addCarToOwner(car1);
Owner owner2 = new Owner();
owner2.setNameOfOwner("asd");
owner2.setSurnameOfOwner("asd");
owner2.addCarToOwner(car2);
carRepository.save(car1);
carRepository.save(car2);
ownersRepository.save(owner1);
ownersRepository.save(owner2);
当我使用 findAll()
方法检查所有者存储库的状态时,我得到所有者和他的汽车的空列表。当我为汽车存储库运行 findAll()
时,我的所有者为 null,因为我没有设置它,但是当所有者需要汽车并且汽车需要所有者时如何设置它?
所有这些导致当我尝试获取具有给定 ID 的用户时,我会得到一个空的汽车列表。
解决方法
看起来您正在 OneToMany
和 Owner
之间创建双向 Car
。在这种情况下,您需要同步关联的双方。
您的实用方法 addCarToOwner
可以很好地做到这一点:
@Data
@Entity
public class Owner implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nameOfOwner;
private String surnameOfOwner;
@OneToMany(mappedBy = "owner")
private List<Car> cars = new ArrayList<>()
public void addCarToOwner(Car car) {
car.setOwner(this);
this.cars.add(car);
}
}
通过将 Owner
设置为 Car
,您可以同步关联的双方。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。