面对java.lang.IllegalArgumentException:在Spring Boot中不是托管类型错误

时间:2018-10-03 10:04:07

标签: spring-boot spring-data-jpa

我有一个小实验项目,其结构如下:

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 个答案:

答案 0 :(得分:0)

@ComponentScan(basePackages= {"com.java.model"})更改为@ComponentScan(basePackages= {"com.java.model.*"})

答案 1 :(得分:0)

我有两个秘诀给你。

  1. 首先,将包结构重命名为com.java是非常不好的做法。您的类路径中可能有几个库,它们的名称都类似“ com.java”。您使用的是这样的东西:“ org.mysupertest”

  2. 只需删除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