错误名称为“ jpaMappingContext”和“ NameOfMyRepository”的creatin bean

问题描述

我尝试从Spring Boot应用程序中的JpaRepository测试我的存储库,但出现此错误:

java.lang.IllegalStateException:无法加载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的类

CarDealer

@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)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...