Столкновение с java.lang.IllegalArgumentException: не ошибка управляемого типа при загрузке Spring

У меня есть небольшой экспериментальный проект, структура которого выглядит следующим образом:

demo
|----->src/main/java
       |---->com.java.application
       |     |---->DemoApplication.java
       |---->com.java.model
             |---->Customer.java
             |---->CustomerRepository.java

Где мой DemoApplication.java

@SpringBootApplication
@ComponentScan(basePackages= {"com.java.model"})
@EnableJpaRepositories(basePackageClasses= {CustomerRepository.class})
@EntityScan("com.java.model.Customer")
public class DemoApplication {

public static void main(String[] args) {
    SpringApplication.run(DemoApplication.class);
}

@Bean
public CommandLineRunner demo(CustomerRepository repository) {
    return (args) -> {
        // save a couple of customers
        repository.save(new Customer("Jack", "Bauer"));
        repository.save(new Customer("Chloe", "O'Brian"));
        repository.save(new Customer("Kim", "Bauer"));
        repository.save(new Customer("David", "Palmer"));
        repository.save(new Customer("Michelle", "Dessler"));
    };
    }
}

Я добавил @Entity в свой класс Customer.java

@Entity
public class Customer {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
private String firstName;
private String lastName;

protected Customer() {}

public Customer(String firstName, String lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
}

@Override
public String toString() {
    return String.format(
            "Customer[id=%d, firstName='%s', lastName='%s']",
            id, firstName, lastName);
}
}

И мой CustomerRepository.java как импорт org.springframework.data.repository.CrudRepository;

public interface CustomerRepository extends CrudRepository<Customer, Long>{
List<Customer> findByLastName(String lastName);
}

Но когда я бегу, я продолжаю получать ошибки. Я пробовал решения в других сообщениях для этой проблемы, но ни один не работает.

Я продолжаю получать: Причина: java.lang.IllegalArgumentException: Не управляемый тип: класс com.java.model.Customer

Что здесь не так?

3 ответа

+ Изменить @ComponentScan(basePackages= {"com.java.model"}) в @ComponentScan(basePackages= {"com.java.model.*"})

У меня есть два совета для вас.

  1. Прежде всего, переименуйте структуру ваших пакетов. Com.java - очень плохая практика. Вы можете иметь несколько библиотек в вашем пути к классам, которые будут называться как "com.java". Вы используете что-то вроде этого: "org.mysupertest"

  2. Просто удалите ComponentScan и EntityScan. Используйте следующую конструкцию:

     @SpringBootApplication(scanBasePackages = "org.mysupertest")
    

Эта ошибка может быть вызвана некоторыми проблемами, такими как базовые пакеты для весенней загрузки или базы пакетов сканирования. Вы должны провести рефакторинг основного класса DemoApplication следующим образом:

@EnableJpaRepositories("com.java.application.*")
 @ComponentScan(basePackages = { "com.java.application.*" })
 @EntityScan("com.java.application.model.*")
public class DemoApplication {
   // your code here
}

а) Основной класс всегда находится в базовом пакете.

б) Другие классы должны быть расположены в подпакетах базового пакета.

в) Еще один, не называйте ваш пакет com.java. Это не хорошо.

Если вы хотите узнать рабочий пример, посетите статью Пример веб-служб Spring Boot Restful.

Другие вопросы по тегам