Cześć
Mam za zadanie uruchomić projekt z Spring, Spring Data JPA i Hibernatem na czele na encjach (i muszę go użyć w projekcie), które wcześniej były używane w poprzednim projekcie z Eclipselinkiem. Encje są pozbawione adnotacji Eclipselinkowych, trochę je dostosowałem do Hibernate (np. double precision było na float w kodzie zamiast na double), lecz utknąłem na jednej rzeczy. Wszystkie relacje OneToMany/ManyToOne w każdej encji zwracają wyjątek "LazyInitializationException". Patrzyłem na adnotacje OneToMany/ManyToOne i wyglądają prawilnie. Nie będę teraz każdej encji wstawiał, wstawie tylko kod konfiguracyjny, natomiast zastanawia mnie co może być przyczyną? A może ten wyjątek tak naprawdę czegoś innego dotyczy? Oczywiście na Eclipselinku wszystko działa prawidłowo, a ja już straciłem pomysły co może być nie halo.
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "FactoryPostgres",
basePackages = {"com.project.screen.repository"}
)
public class ConfigurationDataSource {
@Autowired
ScreenProperties screenProperties;
@Bean(name = "dataSourcePostgres")
public DataSource dataSourcePostgres() {
final BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName(screenProperties.getDatasourceClassnameDriver());
dataSource.setUrl(screenProperties.getDatasourceUrl());
dataSource.setUsername(screenProperties.getDatasourceUsername());
dataSource.setPassword(screenProperties.getDatasourcePassword());
return dataSource;
}
@Bean(name = "defaultDataSource")
@ConfigurationProperties(prefix = "spring.datasource")
@Primary
public DataSource defaultDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "FactoryPostgres")
@PersistenceContext(unitName = "postgres")
public LocalContainerEntityManagerFactoryBean
entityManagerFactory(
) {
LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean =
new LocalContainerEntityManagerFactoryBean();
localContainerEntityManagerFactoryBean.setDataSource(dataSourcePostgres());
localContainerEntityManagerFactoryBean.setPackagesToScan(new String[]{"com.project.model"});
JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
localContainerEntityManagerFactoryBean.setJpaVendorAdapter(vendorAdapter);
localContainerEntityManagerFactoryBean.setJpaProperties(additionalProperties());
return localContainerEntityManagerFactoryBean;
}
@Bean(name = "transactionManager")
@PersistenceContext(unitName = "postgresT")
public PlatformTransactionManager transactionManager(
@Qualifier("FactoryPostgres") EntityManagerFactory
entityManagerFactory
) {
JpaTransactionManager jpaTransactionManager = new JpaTransactionManager();
jpaTransactionManager.setEntityManagerFactory(entityManagerFactory().getObject());
return jpaTransactionManager;
}
Properties additionalProperties() {
Properties properties = new Properties();
properties.setProperty("hibernate.hbm2ddl.auto", "validate");
properties.setProperty("hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect");
properties.setProperty("hibernate.current_session_context_class", "thread");
properties.setProperty("hibernate.show_sql", "true");
properties.setProperty("hibernate.physical_naming_strategy","com.project.config.ConfigurationPhysicalNameStrategy");
return properties;
}