Hibernate needs the EntityManagerFactory to build a Repository which is being injected into the AttributeConverter. e.g.
public class ExampleAttributeConverter implements AttributeConverter<Attribute, Long> {
public ExampleRepository exampleRepository;
public DocumentTypeConverter(ExampleRepository exampleRepository){
this.exampleRepository = exampleRepository;
}
@Override
public Long convertToDatabaseColumn(Attribute attribute) {
}
@Override
public Attribute convertToEntityAttribute(Long dbData) {
}
}
This triggers the following exception:
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'exampleRepository': Cannot create inner bean '(inner bean)#59fc0247' 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)#59fc0247': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'entityManagerFactory': FactoryBean which is currently in creation returned null from getObject
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#59fc0247': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'entityManagerFactory': FactoryBean which is currently in creation returned null from getObject
Caused by: org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'entityManagerFactory: FactoryBean which is currently in creation returned null from getObject"},
"WFLYCTL0412: Required services that are not installed:" => ["jboss.undertow.deployment.default-server.default-host./ExampleService"],
"WFLYCTL0180: Services with missing/unavailable dependencies" => undefined
}
}
I am using the following configuration to provide Hibernate the set of SpringBeans for CDI:
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(ConfigurableListableBeanFactory beanFactory) {
final LocalContainerEntityManagerFactoryBean bean = new LocalContainerEntityManagerFactoryBean();
bean.getJpaPropertyMap().put(AvailableSettings.BEAN_CONTAINER, new SpringBeanContainer(beanFactory));
bean.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
bean.setJtaDataSource(dataSource());
bean.setLoadTimeWeaver(new InstrumentationLoadTimeWeaver());
bean.setPackagesToScan(new String[] { "com.example.test" });
final Properties props = new Properties();
props.setProperty("hibernate.dialect", "org.hibernate.dialect.Oracle10gDialect");
props.setProperty("hibernate.format_sql", "true");
props.setProperty("hibernate.transaction.coordinator_class", "jta");
props.setProperty("hibernate.transaction.jta.platform",
"org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform");
bean.setJpaProperties(props);
return bean;
}
If I try a non-constructor inject approach in my ExampleAttributeConverter e.g.
@Autowired
public ExampleRepository exampleRepository;
Then exampleRepository is never set and is constantly null when the AttributeConverter code is invoked. |