我有一个小实验项目,其结构如下:
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类
这是怎么了?
答案 0 :(得分:0)
将@ComponentScan(basePackages= {"com.java.model"})
更改为@ComponentScan(basePackages= {"com.java.model.*"})
答案 1 :(得分:0)
我有两个秘诀给你。
首先,将包结构重命名为com.java是非常不好的做法。您的类路径中可能有几个库,它们的名称都类似“ com.java”。您使用的是这样的东西:“ org.mysupertest”
只需删除ComponentScan和EntityScan。使用以下构造:
@SpringBootApplication(scanBasePackages = "org.mysupertest")
答案 2 :(得分:0)
该错误可能来自某些问题,例如spring boot basepackages或scan packageBases。您应该像这样重构主类DemoApplication:
@EnableJpaRepositories("com.java.application.*")
@ComponentScan(basePackages = { "com.java.application.*" })
@EntityScan("com.java.application.model.*")
public class DemoApplication {
// your code here
}
a)主类始终位于基础包中。
b)其他类应位于基础包的子包中。
c)再说一遍,不要将您的软件包命名为com.java。不好。
如果您想了解工作示例,请访问帖子Spring Boot Restful Web Services Example