代码之家  ›  专栏  ›  技术社区  ›  developer

创建名为“loginRepository”的bean时出错:调用init方法失败;嵌套异常[重复]

  •  -1
  • developer  · 技术社区  · 8 年前

    这是我的代码:

    春靴课

       package com.angularjs.app.controller;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.builder.SpringApplicationBuilder;
    import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
    import org.springframework.web.bind.annotation.RestController;
    
    
    //@RestController
    //@EnableAutoConfiguration
    @SpringBootApplication
    public class Application extends SpringBootServletInitializer{
    
         protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
                return builder.sources(Application.class);
            }
    
         public static void main(String[] args) {
              SpringApplication.run(Application.class, args);
             }
    
    }
    

    控制器

        package com.angularjs.app.controller;
    
    import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.servlet.ModelAndView;
    
    import com.angularjs.app.message.Response;
    import com.angularjs.app.model.LoginVO;
    import com.angularjs.app.repo.LoginRepository;
    //@Configuration
    //@ComponentScan
    //@EnableAutoConfiguration
    @RestController
    @EnableJpaRepositories("com.angularjs.app.repo")
    public class LoginController {
    
        //@Autowired
        LoginRepository loginRepository;
    
        @RequestMapping("/findbyusername")
        public Response findByLastName(@RequestParam("username") String username) {
    
            LoginVO userDetails = loginRepository.findByUsername(username);
    
            return new Response("Done", userDetails);
        }
    
        @RequestMapping("/")
        ModelAndView home(ModelAndView modelAndView) {
    
            modelAndView.setViewName("home");
    
            return modelAndView;
        }
    
        @RequestMapping(value = "/postuserdetails", method = RequestMethod.POST)
        public void postCustomer(@RequestBody LoginVO loginVo) {
    
            loginRepository.save(new LoginVO(loginVo.getUsername(), loginVo.getPassword(), loginVo.getEmail(),"Y"));
        }
    
    }
    

    反应课

        package com.angularjs.app.message;
    
    public class Response {
    
        private String status;
        private Object data;
    
        public Response() {
    
        }
    
        public Response(String status, Object data) {
            this.status = status;
            this.data = data;
        }
    
        public String getStatus() {
            return status;
        }
    
        public void setStatus(String status) {
            this.status = status;
        }
    
        public Object getData() {
            return data;
        }
    
        public void setData(Object data) {
            this.data = data;
        }
    }
    

    模范班

        package com.angularjs.app.model;
    import java.io.Serializable;
    
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    @Entity
    @Table(name = "user_details")
    public class LoginVO implements  Serializable{
    
        private static final long serialVersionUID = -3009157732242241606L;
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        @Column (name="user_id")
        private long userId;
    
        @Column (name="user_name")
        private String username;
    
        @Column (name="valid_user")
        private String validUser;
    
        @Column (name="password")
        private String password;
    
        @Column (name="email")
        private String email;
    
        public LoginVO(String username, String password, String email, String validuser) {
            this.username = username;
            this.password = password;
            this.email = email;
            this.validUser = validuser;
        }
    
        public long getUserId() {
            return userId;
        }
    
        public void setUserId(long userId) {
            this.userId = userId;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getValidUser() {
            return validUser;
        }
    
        public void setValidUser(String validUser) {
            this.validUser = validUser;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public String getEmail() {
            return email;
        }
    
        public void setEmail(String email) {
            this.email = email;
        }
    
        @Override
        public String toString() {
            return String.format("Customer[userId=%d, username='%s', email='%s']", userId, username, email);
        }
    
    }
    

    回购类

       package com.angularjs.app.repo;
    
    import org.springframework.data.repository.CrudRepository;
    import org.springframework.stereotype.Service;
    
    import com.angularjs.app.model.LoginVO;
    @Service
    public interface LoginRepository extends CrudRepository<LoginVO, Long> {
    
        LoginVO findByUsername(String userName);
    }
    

    例外

        Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
    2018-08-25 16:23:47.591 ERROR 2702 --- [           main] o.s.boot.SpringApplication               : Application run failed
    
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'loginRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Not a managed type: class com.angularjs.app.model.LoginVO
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1699) ~[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:573) ~[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:495) ~[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317) ~[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315) ~[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:740) ~[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:869) ~[spring-context-5.0.8.RELEASE.jar:5.0.8.RELEASE]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) ~[spring-context-5.0.8.RELEASE.jar:5.0.8.RELEASE]
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140) ~[spring-boot-2.0.4.RELEASE.jar:2.0.4.RELEASE]
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:762) [spring-boot-2.0.4.RELEASE.jar:2.0.4.RELEASE]
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:398) [spring-boot-2.0.4.RELEASE.jar:2.0.4.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:330) [spring-boot-2.0.4.RELEASE.jar:2.0.4.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1258) [spring-boot-2.0.4.RELEASE.jar:2.0.4.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1246) [spring-boot-2.0.4.RELEASE.jar:2.0.4.RELEASE]
        at com.angularjs.app.controller.Application.main(Application.java:21) [classes/:na]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_91]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_91]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_91]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_91]
        at org.springframework.boot.maven.AbstractRunMojo$LaunchRunner.run(AbstractRunMojo.java:496) [spring-boot-maven-plugin-2.0.4.RELEASE.jar:2.0.4.RELEASE]
        at java.lang.Thread.run(Thread.java:745) [na:1.8.0_91]
    Caused by: java.lang.IllegalArgumentException: Not a managed type: class com.angularjs.app.model.LoginVO
        at org.hibernate.metamodel.internal.MetamodelImpl.managedType(MetamodelImpl.java:473) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
        at org.springframework.data.jpa.repository.support.JpaMetamodelEntityInformation.<init>(JpaMetamodelEntityInformation.java:72) ~[spring-data-jpa-2.0.3.RELEASE.jar:2.0.3.RELEASE]
        at org.springframework.data.jpa.repository.support.JpaEntityInformationSupport.getEntityInformation(JpaEntityInformationSupport.java:66) ~[spring-data-jpa-2.0.3.RELEASE.jar:2.0.3.RELEASE]
        at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getEntityInformation(JpaRepositoryFactory.java:169) ~[spring-data-jpa-2.0.3.RELEASE.jar:2.0.3.RELEASE]
        at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:107) ~[spring-data-jpa-2.0.3.RELEASE.jar:2.0.3.RELEASE]
        at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:90) ~[spring-data-jpa-2.0.3.RELEASE.jar:2.0.3.RELEASE]
        at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:298) ~[spring-data-commons-2.0.9.RELEASE.jar:2.0.9.RELEASE]
        at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.lambda$afterPropertiesSet$3(RepositoryFactoryBeanSupport.java:286) ~[spring-data-commons-2.0.9.RELEASE.jar:2.0.9.RELEASE]
        at org.springframework.data.util.Lazy.getNullable(Lazy.java:141) ~[spring-data-commons-2.0.9.RELEASE.jar:2.0.9.RELEASE]
        at org.springframework.data.util.Lazy.get(Lazy.java:63) ~[spring-data-commons-2.0.9.RELEASE.jar:2.0.9.RELEASE]
        at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:289) ~[spring-data-commons-2.0.9.RELEASE.jar:2.0.9.RELEASE]
        at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:102) ~[spring-data-jpa-2.0.3.RELEASE.jar:2.0.3.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1758) ~[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1695) ~[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
        ... 22 common frames omitted
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   developer    8 年前

    加入 @EntityScan(basePackageClasses=LoginVO.class) 在应用课上,我的问题得到了解决。