Hibernate needs the EntityManagerFactory to build a Repository which is being injected into the AttributeConverter. e.g.
{code:java}public class ExampleAttributeConverter implements AttributeConverter<Attribute, Long> { public ExampleRepository exampleRepository;
// constructor injection public ExampleRepository ExampleAttributeConverter (ExampleRepository exampleRepository){ this.exampleRepository = exampleRepository; }
@Override public Long convertToDatabaseColumn(Attribute attribute) { // perform operation with repository }
@Override public Attribute convertToEntityAttribute(Long dbData) { // perform operation with repository } }{code}
This triggers the following exception:
{code:java}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 } }{code}
I am using the following configuration to provide Hibernate the set of SpringBeans for CDI:
{code:java}@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.show_sql", "true"); 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; }{code}
If I try a non-constructor inject approach in my ExampleAttributeConverter e.g.
{code:java}@Autowired public ExampleRepository exampleRepository;{code}
Then exampleRepository is never set and is constantly null when the AttributeConverter code is invoked. |
|