微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

@OneToMany 的错误使用返回空列表

如何解决@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,因为我没有设置它,但是当所有者需要汽车并且汽车需要所有者时如何设置它?

owner repository

car repository

所有这些导致当我尝试获取具有给定 ID 的用户时,我会得到一个空的汽车列表。

解决方法

看起来您正在 OneToManyOwner 之间创建双向 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 举报,一经查实,本站将立刻删除。