I'm using this code to configure Spring with Hibernate:
@SpringBootApplication
@Configuration
@EnableTransactionManagement
public class ContextServer {
@Bean
public LocalSessionFactoryBean getSessionFactory() {
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
try {
sessionFactory.setDataSource(dataSource());
} catch (NamingException e) {
e.printStackTrace();
}
sessionFactory.setPackagesToScan(new String[] { "org.plugin.database.models" });
sessionFactory.setHibernateProperties(hibernateProperties());
// factoryBean.setAnnotatedClasses(User.class, Authorities.class);
return sessionFactory;
}
@Bean
public DataSource dataSource() throws NamingException {
return (DataSource) new JndiTemplate().lookup("java:/global/production_gateway");
}
private final Properties hibernateProperties() {
final Properties hibernateProperties = new Properties();
hibernateProperties.setProperty("hibernate.hbm2ddl.auto", "create-drop");
hibernateProperties.setProperty("hibernate.dialect", "org.hibernate.dialect.MariaDBDialect");
hibernateProperties.setProperty("hibernate.show_sql", "true");
hibernateProperties.setProperty("hibernate.format_sql", "true");
return hibernateProperties;
}
@Bean
public HibernateTransactionManager getTransactionManager() {
HibernateTransactionManager transactionManager = new HibernateTransactionManager();
transactionManager.setSessionFactory(getSessionFactory().getObject());
return transactionManager;
}
}
I use the factory this way:
@Component("authorize")
@Transactional
public class AuthorizeService implements MessageProcessor {
@Autowired
SessionFactory sessionFactory;
@Override
public void processMessage(.....) {
Session session = sessionFactory.getCurrentSession();
}
But I get exception:
java.lang.ClassCastException:
org.springframework.orm.jpa.EntityManagerHolder cannot be cast to
org.springframework.orm.hibernate5.SessionHolder
I found these answers: ClassCastException: org.springframework.orm.jpa.EntityManagerHolder cannot be cast to org.springframework.orm.hibernate5.SessionHolder
Is there any other solution that I can use? Above solutions are quick hacks.