Столкновение с 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.*"})
У меня есть два совета для вас.
Прежде всего, переименуйте структуру ваших пакетов. Com.java - очень плохая практика. Вы можете иметь несколько библиотек в вашем пути к классам, которые будут называться как "com.java". Вы используете что-то вроде этого: "org.mysupertest"
Просто удалите 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.