nested exception is java.lang.IllegalArgumentException: Not a managed type: class

50,506

Solution 1

Spring is not aware of your entity. You need to denote MySpringBootApplication class with @EntityScan("your.entities.package")

Solution 2

In my case it was missing @Entity & and @Id annotation in Entity class.

Solution 3

You should put Entity class same module with Repository class, If not , you should add @EntityScan to your application class

Share:
50,506
somnathchakrabarti
Author by

somnathchakrabarti

Updated on June 10, 2021

Comments

  • somnathchakrabarti
    somnathchakrabarti almost 3 years

    I am trying to deploy a Spring-Boot application with Service accessing a JpaRepository which is connecting to PostgreSQL DB at runtime using JPA and Hibernate, refering to connection properties in src/main/resources/application.properties

    When I am deploying the built .WAR on Tomcat, the Application is failing to start with the error as given in below Error Log.

    Can somebody please help out what is the meaning of this error?

    Note I have noted the trouble points in MyServiceImpl and MyRequestBody classes but I am not getting the exact reason for the error, as I am new to Spring framework.

    The definitions of the relevant classes in my Spring Boot Starter project are as follows:

    Spring Boot Application

    @SpringBootApplication
    @ComponentScan(<root package name under which all subpackages containing relevant classes >)
    public class MySpringBootApplication extends SpringBootServletInitializer {
    

    My Spring-Boot RestController class (autowiring the MyService class instance )

    @RestController
    public class MyController {
    
        @Autowired
        MyService myService;
    

    My Service interface (I have not provided any @Service annotation)

    public interface MyService {
        //all service method definitions
    }
    

    Spring ServiceImpl class with the autowiring repository instance to operate on PostgreSQL DB

    @Service("myService")
    public class MyServiceImpl implements MyService {
    
           @Autowired
           private MyRepository myRepository; <-- **ERROR -- Bean not found** 
    
           //other default services e.g. find, add, delete, update, etc.
    
    }
    

    My Repository class

    @Repository
    public interface MyRepository extends JpaRepository<MyRequestBody, Long> {
        @Query("select h from MyRequestBody h where h.column1 = ?1")
        List<MyRequestBody> findByColumn1(String col1);
    }
    

    My Entity class

    @Entity
    @Table(name = "myTable", schema = "my_db")
    public class MyRequestBody { <-- **ERROR -- Not a managed class type**
    
         @Id
         @Column(name = "id")
         @GeneratedValue(strategy = GenerationType.SEQUENCE)
         private Long id;
         @Column(name = "column1")
         private String column1;
    
    //getter and setter AND toString methods
    

    Error Log (on deploying .WAR on Tomcat)

    Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
    2017-12-28 15:50:23.282 ERROR 5320 --- [ost-startStop-1] o.s.boot.SpringApplication               : Application startup failed
    
    org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'MyController': Unsatisfied dependency expressed through field 'myService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'myService': Unsatisfied dependency expressed through field 'myRepository'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Not a managed type: class com.rest.MyRequestBody
    

    After adding @EntityScan("entities_package_name")

    ***************************
    APPLICATION FAILED TO START
    ***************************
    
    Description:
    
    Field myRepository in com.rest.MyServiceImpl required a bean of type 'com.rest.MyRepository' that could not be found.
    
    
    Action:
    
    Consider defining a bean of type 'com.rest.MyRepository' in your configuration.
    
    29-Dec-2017 08:22:25.023 SEVERE [localhost-startStop-1] org.apache.catalina.core.ContainerBase.addChildInternal ContainerBase.addChild: start:
     org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/spring-boot-service]]
            at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
            at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:752)
            at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:728)
            at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
            at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:986)
            at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1857)
            at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
            at java.util.concurrent.FutureTask.run(FutureTask.java:266)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
            at java.lang.Thread.run(Thread.java:748)
    Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'myController': Unsatisfied dependency expressed through field 'myService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'myService': Unsatisfied dependency expressed through field 'myRepository'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.rest.MyRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
            at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588)
            at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
            at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1264)
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
            at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
            at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
            at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
            at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
            at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761)
            at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867)
            at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543)
            at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
            at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693)
            at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360)
            at org.springframework.boot.SpringApplication.run(SpringApplication.java:303)
            at org.springframework.boot.web.support.SpringBootServletInitializer.run(SpringBootServletInitializer.java:154)
            at org.springframework.boot.web.support.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:134)
            at org.springframework.boot.web.support.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:87)
            at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:169)
            at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5196)
            at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
            ... 10 more
    Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'myService': Unsatisfied dependency expressed through field 'myRepository'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.rest.MyRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
            at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588)
            at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
            at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1264)
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
            at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
            at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
            at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
            at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
            at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:208)
            at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1138)
            at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066)
            at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
            ... 32 more
    Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.rest.MyRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
            at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1493)
            at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1104)
            at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066)
            at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
            ... 45 more
    
    29-Dec-2017 08:22:25.026 SEVERE [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Error deploying web application archive [/home/sunilg/apache-tomcat-8.5.24/webapps/spring-boot-service.war]
     java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/spring-boot-service]]
            at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:756)
            at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:728)
            at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
            at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:986)
            at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1857)
            at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
            at java.util.concurrent.FutureTask.run(FutureTask.java:266)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
            at java.lang.Thread.run(Thread.java:748)
    
  • somnathchakrabarti
    somnathchakrabarti over 6 years
    Getting a new error after entering @EntityScan to MySpringBootApplication class. Edited my question with the new Error Log
  • somnathchakrabarti
    somnathchakrabarti over 6 years
    Do I need to add @EnableJpaRepositories("package_for_repository") to MySpringBootApplication class?
  • somnathchakrabarti
    somnathchakrabarti over 6 years
    Yes after adding @EnableJpaRepositories, it worked!
  • old_soul_on_the_run
    old_soul_on_the_run about 5 years
    EntityScan is a new annotation I learned and it worked for me. I am just wondering why Spring did not mention about it. I was understand the impression that even the entity classes will be scanned by scanBasePackage. Anyways Thanks!
  • Woodsman
    Woodsman about 3 years
    I have a similar error, however, I added an EnableJpaRepositories and an EntityScan annotation on the Application and specified the exact package. The entity has an Entity and Id annotation, despite all this it still does not care.