NoSuchBeanDefinitionException:未定义名为“entityManagerFactory"的 bean [英] NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' is defined
问题描述
我有一个简单的 Spring 4 WebMVC 应用程序 (Java-config),我想添加 JPA.但是当我尝试运行应用程序(如在 Tomcat 上部署)时,我得到:什么可能是错误的来源?
I have simple Spring 4 WebMVC app (Java-config), and I want to add JPA. But when I try to run app (as deloyed on Tomcat) I get: What can be a source of error?
创建名为indexController"的 bean 时出错:注入自动装配依赖项失败;嵌套异常是org.springframework.beans.factory.BeanCreationException:无法自动装配字段:org.demo.webtemplate.db.repository.CustSysRepositoryorg.demo.webtemplate.controllers.IndexController.repository;嵌套例外是 org.springframework.beans.factory.BeanCreationException:创建名为custSysRepository"的 bean 时出错:无法创建内部bean '(内部 bean)#f4da8a0' 类型[org.springframework.orm.jpa.SharedEntityManagerCreator] 同时设置bean 属性 'entityManager';嵌套异常是org.springframework.beans.factory.BeanCreationException:错误创建名为(内部 bean)#f4da8a0"的 bean:无法解析设置构造函数时对 bean 'entityManagerFactory' 的引用争论;嵌套异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:否定义了名为entityManagerFactory"的 bean
Error creating bean with name 'indexController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: org.demo.webtemplate.db.repository.CustSysRepository org.demo.webtemplate.controllers.IndexController.repository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'custSysRepository': Cannot create inner bean '(inner bean)#f4da8a0' of type [org.springframework.orm.jpa.SharedEntityManagerCreator] while setting bean property 'entityManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#f4da8a0': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' is defined
初始化程序:
package org.demo.webtemplate;
...
public class SpringWebMvcInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(Config.class);
ctx.setServletContext(servletContext);
Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(ctx));
servlet.addMapping("/");
servlet.setLoadOnStartup(1);
}
}
配置:
package org.demo.webtemplate;
...
@Configuration
@EnableWebMvc
@ComponentScan("pl.bzwbk.webtemplate")
@EnableJpaRepositories("pl.bzwbk.webtemplate.db.repository")
public class Config {
@Bean
public UrlBasedViewResolver setupViewResolver() {
UrlBasedViewResolver resolver = new UrlBasedViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
resolver.setViewClass(JstlView.class);
return resolver;
}
}
控制器:
package org.demo.webtemplate.controllers;
...
@Controller
public class IndexController {
@Autowired
CustSysRepository repository;
@RequestMapping(value = "/", method = RequestMethod.GET)
public String index() {
List<CustSys> clients = repository.findByFullName("SOME NAME");
return "index"+clients .size();
}
}
存储库:
package org.demo.webtemplate.db.repository;
...
public interface CustSysRepository extends JpaRepository<CustSys, Long> {
List<CustSys> findByFullName(String fullName);
}
实体:
package org.demo.webtemplate.db.entity;
...
@Entity
@Table(name = "CUST_SYS")
public class CustSys implements Serializable {
private static final long serialVersionUID = 1L;
...
@Size(max = 255)
@Column(name = "FULL_NAME")
private String fullName;
...
public String getFullName() {
return fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
...
}
application.properties:
jdbc.driverClassName=org.hsqldb.jdbc.JDBCDriver
jdbc.url=jdbc:hsqldb:mem:testdb
jdbc.user=sa
jdbc.pass=
推荐答案
您在 Config
类中完全缺少数据库配置.
试试这个,例如:
You're missing completly DB configuration in your Config
class.
Try this for example:
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("org.hsqldb.jdbc.JDBCDriver");
dataSource.setUrl("jdbc:hsqldb:mem:testdb");
dataSource.setUsername("sa");
dataSource.setPassword("");
return dataSource;
}
@Bean
public EntityManager entityManager() {
return entityManagerFactory().getObject().createEntityManager();
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource());
em.setPackagesToScan("package.where.your.entites.like.CustSys.are.stored");
return em;
}
这篇关于NoSuchBeanDefinitionException:未定义名为“entityManagerFactory"的 bean的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!