Ne peut pas créer intérieure bean "(intérieure bean) " du type [org.springframework.orm.jpa.SharedEntityManagerCreator]?
J'ai utilisé le Java en fonction des configurations. Lorsque j'utilise l'app dépôts-je obtenir le can not create inner bean exception of type shared entity manger creator
.
Printemps contex config:
@Configuration
@ComponentScan(basePackages = { "com.sample.proj.controller" })
@EnableWebMvc
@EnableTransactionManagement
@EnableJpaRepositories("com.sample.proj.domain")
@PropertySource("classpath:application.properties")
public class ServletContextConfig {
private static final String PROPERTY_NAME_DATABASE_DRIVER = "db.driver";
private static final String PROPERTY_NAME_DATABASE_URL = "db.url";
private static final String PROPERTY_NAME_DATABASE_USERNAME = "db.username";
private static final String PROPERTY_NAME_DATABASE_PASSWORD = "db.password";
private static final String PROPERTY_NAME_HIBERNATE_DIALECT = "hibernate.dialect";
private static final String PROPERTY_NAME_HIBERNATE_FORMAT_SQL = "hibernate.format_sql";
private static final String PROPERTY_NAME_HIBERNATE_NAMING_STRATEGY = "hibernate.ejb.naming_strategy";
private static final String PROPERTY_NAME_HIBERNATE_SHOW_SQL = "hibernate.show_sql";
private static final String PROPERTY_NAME_HIBERNATE_HBN2DDL_SQL = "hibernate.hbm2ddl.auto";
@Resource
private Environment environment;
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(environment
.getRequiredProperty(PROPERTY_NAME_DATABASE_DRIVER));
dataSource.setUrl(environment
.getRequiredProperty(PROPERTY_NAME_DATABASE_URL));
dataSource.setUsername(environment
.getRequiredProperty(PROPERTY_NAME_DATABASE_USERNAME));
dataSource.setPassword(environment
.getRequiredProperty(PROPERTY_NAME_DATABASE_PASSWORD));
return dataSource;
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean()
throws Exception {
LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
entityManagerFactoryBean.setDataSource(dataSource());
entityManagerFactoryBean
.setPackagesToScan(new String[] { "com.sample.proj.domain" });
entityManagerFactoryBean
.setPersistenceProviderClass(HibernatePersistence.class);
Properties jproperties = new Properties();
jproperties.put("hibernate.dialect", environment
.getRequiredProperty(PROPERTY_NAME_HIBERNATE_DIALECT));
jproperties.put("hibernate.format_sql", environment
.getRequiredProperty(PROPERTY_NAME_HIBERNATE_FORMAT_SQL));
jproperties.put("hibernate.ejb.naming_strategy", environment
.getRequiredProperty(PROPERTY_NAME_HIBERNATE_NAMING_STRATEGY));
jproperties.put("hibernate.show_sql", environment
.getRequiredProperty(PROPERTY_NAME_HIBERNATE_SHOW_SQL));
jproperties.put("hibernate.hbm2ddl.auto", environment
.getRequiredProperty(PROPERTY_NAME_HIBERNATE_HBN2DDL_SQL));
JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
entityManagerFactoryBean.setJpaVendorAdapter(vendorAdapter);
entityManagerFactoryBean.setJpaProperties(jproperties);
return entityManagerFactoryBean;
}
}
Webintializer:
@Override
public void onStartup(ServletContext container) {
//Create the 'root' Spring application context
AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
rootContext.register(ServletContextConfig.class);
//Manage the lifecycle of the root application context
container.addListener(new ContextLoaderListener(rootContext));
//Create the dispatcher servlet's Spring application context
AnnotationConfigWebApplicationContext dispatcherContext = new AnnotationConfigWebApplicationContext();
dispatcherContext.register(ServletContextConfig.class);
//Register and map the dispatcher servlet
ServletRegistration.Dynamic dispatcher = container.addServlet(
"dispatcher", new DispatcherServlet(dispatcherContext));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
}
Référentiel:
public interface PersonRepository extends JpaRepository<Person, String> {
}
Classe de Service:
@Service
@Transactional
public class PersonService {
@Autowired
PersonRepository personRepository;
public Person saveDetails(Person person) {
//System.out.println("Service Class:Person Name:"+
//person.getPersonName());
System.out.println("Executed");
return person;
}
}
Classe de contrôleur:
@RequestMapping(value = "/addPerson", method = RequestMethod.POST)
public String addperson(@RequestParam("personName") String name,
@RequestParam("personAddress") String address, Model model) {
System.out.println("Name:" + name);
System.out.println("Address:" + address);
Person person = new Person();
person.setPersonId(1);
person.setPersonName(name);
person.setPersonAddress(address);
personService.saveDetails(person);
model.addAttribute("result", "Your record inserted successfully");
return HOME_VIEW;
}
Domaine classe:
@Entity
@Table(name = "PERSON")
public class Person implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
private Integer personId;
private String personName;
private String personAddress;
//getters and setters...
}
L'exception stacktrace est comme ci-dessous:
SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'personRepository': Cannot create inner bean '(inner bean)' 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)#1': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' is defined
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:282)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:126)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1391)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1132)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:589)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:383)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:283)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4791)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5285)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:618)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:650)
at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1582)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, si vous regardez attentivement, à l'exception de trace, vous verrez que
ContextLoaderListner
est en fait de se plaindreNo bean named 'entityManagerFactory' is defined
comme la cause pour ne pas être en mesure de créerpersonRepository
.Que je ne sais pas ce exacte de la structure de projet est, Vous pouvez essayer de mettre des haricots nom avec
LocalContainerEntityManagerFactoryBean
de sorte que la source peut se trouver et de se l'injecter.c'est à dire quelque Chose comme ceci :
À l'aide de la
principal Application.java fichier a fait l'affaire pour moi.
J'ai la plupart de mes fichiers se trouvant dans le paquet
Donc, j'ai écrit mon code en tant que tel (Application.java):
Enfin, j'ai obtenu cette solution. J'ai fait cette modifications dans le fichier de configuration.
Il s'exécute avec succès.