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 DocumentTypeConverter ExampleRepository (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.
|
|