Java 实体管理器工厂的循环引用
每次我尝试启动我的应用程序时,在启动时都会出现以下错误:Java 实体管理器工厂的循环引用,java,spring,jpa,spring-data,Java,Spring,Jpa,Spring Data,每次我尝试启动我的应用程序时,在启动时都会出现以下错误: 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 nam
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 'org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'identityAccessAppConfig': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.package.identityaccess.identity.UserRepository com.package.identityaccess.IdentityAccessAppConfig.userRepository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userRepository': 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 'identityAccessEntityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'identityAccessEntityManagerFactory': Requested bean is currently in creation: Is there an unresolvable circular reference?
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:529)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
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:198)
at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:741)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:389)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:294)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4797)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5291)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
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:722)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'identityAccessAppConfig': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.package.identityaccess.identity.UserRepository com.package.identityaccess.IdentityAccessAppConfig.userRepository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userRepository': 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 'identityAccessEntityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'identityAccessEntityManagerFactory': Requested bean is currently in creation: Is there an unresolvable circular reference?
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:288)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1116)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
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.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:353)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1025)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:921)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:487)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
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:198)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:438)
at org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:277)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.detectPersistenceExceptionTranslators(PersistenceExceptionTranslationInterceptor.java:139)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.<init>(PersistenceExceptionTranslationInterceptor.java:79)
at org.springframework.dao.annotation.PersistenceExceptionTranslationAdvisor.<init>(PersistenceExceptionTranslationAdvisor.java:71)
at org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor.setBeanFactory(PersistenceExceptionTranslationPostProcessor.java:85)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeAwareMethods(AbstractAutowireCapableBeanFactory.java:1502)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1470)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521)
... 20 more
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.package.identityaccess.identity.UserRepository com.package.identityaccess.IdentityAccessAppConfig.userRepository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userRepository': 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 'identityAccessEntityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'identityAccessEntityManagerFactory': Requested bean is currently in creation: Is there an unresolvable circular reference?
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:514)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:285)
... 45 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userRepository': 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 'identityAccessEntityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'identityAccessEntityManagerFactory': Requested bean is currently in creation: Is there an unresolvable circular reference?
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:1387)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1128)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
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.findAutowireCandidates(DefaultListableBeanFactory.java:912)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:855)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:770)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:486)
... 47 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#1': Cannot resolve reference to bean 'identityAccessEntityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'identityAccessEntityManagerFactory': Requested bean is currently in creation: Is there an unresolvable circular reference?
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:329)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107)
at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:615)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:441)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1025)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:921)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:487)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:271)
... 60 more
Caused by: org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'identityAccessEntityManagerFactory': Requested bean is currently in creation: Is there an unresolvable circular reference?
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.beforeSingletonCreation(DefaultSingletonBeanRegistry.java:327)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:217)
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.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323)
身份访问:
@Configuration
@ComponentScan(basePackages = "com.package.identityaccess")
@EnableJpaRepositories(entityManagerFactoryRef = "identityAccessEntityManagerFactory", value = "com.package.identityaccess")
@EnableTransactionManagement
public class IdentityAccessAppConfig
{
@Autowired
UserRepository userRepository;
@Bean
public DataSource identityAccessDataSource() throws IOException, SQLException
{
return new SelfConfiguringBasicDataSource(System.getProperty("db_properties_path") + "/dev.oracle.properties", "");
}
@Bean
public Map<String, Object> identityAccessJpaProperties()
{
Map<String, Object> props = new HashMap<>();
props.put("eclipselink.weaving", "false");
props.put("eclipselink.target-database", OraclePlatform.class.getName());
return props;
}
@Bean
public JpaVendorAdapter identityAccessJpaVendorAdapter()
{
EclipseLinkJpaVendorAdapter eclipseLinkJpaVendorAdapter = new EclipseLinkJpaVendorAdapter();
eclipseLinkJpaVendorAdapter.setDatabasePlatform(OraclePlatform.class.getName());
eclipseLinkJpaVendorAdapter.setGenerateDdl(false);
eclipseLinkJpaVendorAdapter.setShowSql(true);
return eclipseLinkJpaVendorAdapter;
}
@Bean
public PlatformTransactionManager identityAccessTransactionManager() throws IOException, SQLException
{
JpaTransactionManager txManager = new JpaTransactionManager();
txManager.setEntityManagerFactory(identityAccessEntityManagerFactory().getObject());
return txManager;
}
@Bean
public LocalContainerEntityManagerFactoryBean identityAccessEntityManagerFactory() throws IOException, SQLException
{
LocalContainerEntityManagerFactoryBean lef = new LocalContainerEntityManagerFactoryBean();
lef.setDataSource(identityAccessDataSource());
lef.setJpaPropertyMap(identityAccessJpaProperties());
lef.setJpaVendorAdapter(identityAccessJpaVendorAdapter());
lef.setPackagesToScan("com.package.identityaccess");
return lef;
}
@Bean
public AuthenticationService authenticationService()
{
return new AuthenticationServiceImpl(userRepository);
}
}
@配置
@组件扫描(basePackages=“com.package.identityaccess”)
@EnableJParepositions(entityManagerFactoryRef=“identityAccessEntityManagerFactory”,value=“com.package.identityaccess”)
@启用事务管理
公共类标识AccessAppConfig
{
@自动连线
用户存储库用户存储库;
@豆子
公共数据源标识AccessDataSource()引发IOException、SQLException
{
返回新的SelfConfiguringBasicDataSource(System.getProperty(“db\u properties\u path”)+“/dev.oracle.properties”,”);
}
@豆子
公共地图标识访问JPA属性()
{
Map props=newhashmap();
道具放置(“日食编织”、“假”);
put(“eclipselink.target数据库”,OraclePlatform.class.getName());
返回道具;
}
@豆子
公共JpaVendorAdapter标识访问JpaVendorAdapter()
{
EclipseLinkJpaVendorAdapter EclipseLinkJpaVendorAdapter=新的EclipseLinkJpaVendorAdapter();
eclipseLinkJpaVendorAdapter.setDatabasePlatform(OraclePlatform.class.getName());
eclipseLinkJpaVendorAdapter.setGenerateDdl(false);
eclipseLinkJpaVendorAdapter.setShowSql(true);
返回eclipseLinkJpaVendorAdapter;
}
@豆子
公共平台TransactionManager标识Access TransactionManager()引发IOException、SQLException
{
JpaTransactionManager txManager=新的JpaTransactionManager();
setEntityManagerFactory(identityAccessEntityManagerFactory().getObject());
返回txManager;
}
@豆子
public LocalContainerEntityManagerFactoryBean identityAccessEntityManagerFactory()引发IOException、SQLException
{
LocalContainerEntityManagerFactoryBean lef=新的LocalContainerEntityManagerFactoryBean();
lef.setDataSource(identityAccessDataSource());
lef.setjpapropertypap(identityAccessJpaProperties());
lef.setJpaVendorAdapter(identityAccessJpaVendorAdapter());
lef.setPackagesToScan(“com.package.identityaccess”);
返回lef;
}
@豆子
公共身份验证服务身份验证服务()
{
返回新的AuthenticationServiceImpl(userRepository);
}
}
模块2:
@Configuration
@ComponentScan(basePackages = "com.package.myapp.core")
@EnableJpaRepositories("com.package.myapp.core.domain")
@EnableTransactionManagement
public class ModuleTwoAppConfig
{
@Bean
public DataSource dataSource()
{
EmbeddedDatabaseBuilder embeddedDatabaseBuilder = new EmbeddedDatabaseBuilder();
embeddedDatabaseBuilder.setType(EmbeddedDatabaseType.HSQL);
embeddedDatabaseBuilder.addScript("setup.sql");
return embeddedDatabaseBuilder.build();
}
@Bean
public Map<String, Object> jpaProperties()
{
Map<String, Object> props = new HashMap<>();
props.put("eclipselink.weaving", "false");
props.put("eclipselink.ddl-generation", "create-tables");
props.put("eclipselink.target-database", HSQLPlatform.class.getName());
return props;
}
@Bean
public JpaVendorAdapter jpaVendorAdapter()
{
EclipseLinkJpaVendorAdapter eclipseLinkJpaVendorAdapter = new EclipseLinkJpaVendorAdapter();
eclipseLinkJpaVendorAdapter.setDatabasePlatform(HSQLPlatform.class.getName());
eclipseLinkJpaVendorAdapter.setGenerateDdl(true);
eclipseLinkJpaVendorAdapter.setShowSql(true);
return eclipseLinkJpaVendorAdapter;
}
@Bean
public PlatformTransactionManager transactionManager()
{
JpaTransactionManager txManager = new JpaTransactionManager();
txManager.setEntityManagerFactory(entityManagerFactory().getObject());
return txManager;
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory()
{
LocalContainerEntityManagerFactoryBean lef = new LocalContainerEntityManagerFactoryBean();
lef.setDataSource(dataSource());
lef.setJpaPropertyMap(jpaProperties());
lef.setJpaVendorAdapter(jpaVendorAdapter());
lef.setPackagesToScan("com.package.myapp.core.domain");
return lef;
}
}
@配置
@ComponentScan(basePackages=“com.package.myapp.core”)
@EnableJpaRepositories(“com.package.myapp.core.domain”)
@启用事务管理
公共类ModuleToAppConfig
{
@豆子
公共数据源数据源()
{
EmbeddedDatabaseBuilder EmbeddedDatabaseBuilder=新的EmbeddedDatabaseBuilder();
setType(EmbeddedDatabaseType.HSQL);
embeddedDatabaseBuilder.addScript(“setup.sql”);
返回embeddedDatabaseBuilder.build();
}
@豆子
公共地图JPAPProperties()
{
Map props=newhashmap();
道具放置(“日食编织”、“假”);
put(“eclipselink.ddl生成”,“创建表”);
put(“eclipselink.target数据库”,HSQLPlatform.class.getName());
返回道具;
}
@豆子
公共JpaVendorAdapter JpaVendorAdapter()
{
EclipseLinkJpaVendorAdapter EclipseLinkJpaVendorAdapter=新的EclipseLinkJpaVendorAdapter();
EclipseLinekJPavendorAdapter.setDatabasePlatform(hsqlplation.class.getName());
eclipseLinkJpaVendorAdapter.setGenerateDdl(true);
eclipseLinkJpaVendorAdapter.setShowSql(true);
返回eclipseLinkJpaVendorAdapter;
}
@豆子
公共平台transactionManager transactionManager()
{
JpaTransactionManager txManager=新的JpaTransactionManager();
setEntityManagerFactory(entityManagerFactory().getObject());
返回txManager;
}
@豆子
public LocalContainerEntityManagerFactoryBean entityManagerFactory()
{
LocalContainerEntityManagerFactoryBean lef=新的LocalContainerEntityManagerFactoryBean();
lef.setDataSource(dataSource());
lef.setjpapropertypap(jpaProperties());
lef.setJpaVendorAdapter(jpaVendorAdapter());
lef.setPackagesToScan(“com.package.myapp.core.domain”);
返回lef;
}
}
UserRepository(使用spring数据):
public interface UserRepository扩展了JpaRepository
{
@查询(“从用户u中选择u,其中u.User\u id=?1”)
用户findByUserId(字符串userId);
}
你能看到我所做的有什么问题吗?我要在黑暗中试一试,请验证 类“IdentityAccessAppConfig”需要一个identityAccessEntityManagerFactory
@EnableJpaRepositories(entityManagerFactoryRef = "identityAccessEntityManagerFactory", value = "com.package.identityaccess")
但也可以通过以下方法满足identityAccessEntityManagerFactory的创建:
@Bean
public LocalContainerEntityManagerFactoryBean identityAccessEntityManagerFactory() throws IOException, SQLException
{
当一个类自己负责创建某个对象时,它如何要求该对象的存在?允许这样做吗?我很感激这个建议,并尝试相应地更改配置,但仍然出现相同的错误。为了回答你的问题,我很确定我在问题中的做法是正确的。
@EnableJpaRepositories(entityManagerFactoryRef = "identityAccessEntityManagerFactory", value = "com.package.identityaccess")
@Bean
public LocalContainerEntityManagerFactoryBean identityAccessEntityManagerFactory() throws IOException, SQLException
{