创建名称为 'jpaMappingContext' 和 'NameOfMyRepository' 的 bean 时出错

Error creatin bean with name 'jpaMappingContext' and 'NameOfMyRepository'

我试图在我的 Spring 引导应用程序中从 JpaRepository 测试我的存储库,但我收到此错误:

java.lang.IllegalStateException: Failed to load ApplicationContext

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'carDealerRepository' defined in schule.privas.microservice.repository.CarDealerRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Cannot resolve reference to bean 'jpaMappingContext' while setting bean property 'mappingContext'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaMappingContext': Invocation of init method failed; nested exception is org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: schule.privas.microservice.model.Car.cardealer in schule.privas.microservice.model.CarDealer.cars

(异常列表要长很多,但我认为这是唯一有趣的部分)

这是我的存储库测试的代码

@Transactional
@SpringBootTest
public class CarDealerRepositoryTest {

    @Autowired
    private CarDealerRepository carDealerRepository;

    private CarDealer carDealer;
    private Car car;

    @BeforeEach
    void initialize(){
        carDealer = CarDealer.builder()
                .cars(new ArrayList<Car>())
                .address("schibinabi")
                .sales(10000f)
                .build();


        car = Car.builder()
                .brand("McLaren")
                .maxSpeed(300)
                .price(10500f)
                .build();

        carDealer.addCar(car);
    }

    @Test
    void verifyFindAll(){
        Iterable<CarDealer> carDealerList = carDealerRepository.findAll();

        assertThat(carDealerList).isNotNull();
        assertThat(carDealerList).isEmpty();
    }
}

我尝试使用断点,但它甚至没有出现在我编写的代码中。

这里是CarCarDealer

的类

汽车经销商:

@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@Builder
@Getter
@Setter

public class CarDealer extends AbstractPersistable<Long> {
    private Float sales;
    private String address;

    @OneToMany(mappedBy = "cardealer", cascade = CascadeType.PERSIST)
    private List<Car> cars = new ArrayList<Car>();

    public void addCar(Car car) {
        cars.add(car);
        if(!this.equals(car.getCarDealer())){
            car.setCarDealer(this);
        }
    }

    public boolean containsCar(Car car) {
        return cars.contains(car);
    }
}

汽车:

@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@Builder
@Getter
@Setter

public class Car extends AbstractPersistable<Long> {

    private String brand;
    private Float price;
    private Integer maxSpeed;

    @ElementCollection
    private List<String> versions;

    @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
    @JsonIgnore
    private CarDealer carDealer;

    public void setCarDealer(CarDealer dealer) {
        this.carDealer = dealer;
        if (!dealer.containsCar(this)) {
            dealer.addCar(this);
        }
    }
}

这里也是存储库界面:

@Repository
public interface CarDealerRepository extends JpaRepository<CarDealer, Long> {
}

您应该尝试使用与 Car 中的 属性 相同的外壳。

所以应该是:

 @OneToMany(mappedBy = "carDealer", cascade = CascadeType.PERSIST)

而不是:

 @OneToMany(mappedBy = "cardealer", cascade = CascadeType.PERSIST)