![](/img/trans.png)
[英]Error - NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' available
[英]NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' is defined
我有簡單的Spring 4 WebMVC應用程序(Java-config),我想添加JPA。 但是當我嘗試運行app(在Tomcat上進行了部署)時,我得到:什么可能是錯誤的來源?
創建名為'indexController'的bean時出錯:注入自動連接的依賴項失敗; 嵌套異常是org.springframework.beans.factory.BeanCreationException:無法自動裝配字段:org.demo.webtemplate.db.repository.CustSysRepository org.demo.webtemplate.controllers.IndexController.repository; 嵌套異常是org.springframework.beans.factory.BeanCreationException:創建名為'custSysRepository'的bean時出錯:在設置bean時無法創建[org.springframework.orm.jpa.SharedEntityManagerCreator]類型的內部bean'(內部bean)#f4da8a0' property'entalManager'; 嵌套異常是org.springframework.beans.factory.BeanCreationException:創建名為'(內部bean)#f4da8a0'的bean時出錯:在設置構造函數參數時無法解析對bean'entalManagerFactory'的引用; 嵌套異常是org.springframework.beans.factory。 NoSuchBeanDefinitionException:沒有定義名為“entityManagerFactory”的bean
初始化:
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
類中缺少完整的數據庫配置。
試試這個例子:
@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;
}
在這個問題中,我發布了一個完整的例子,說明如何對需要自動裝配的JpaRepository的彈簧控制器進行單元測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.