I\'m using spring boot and i want to integrate spring with hibernate. I want to make a Session Factory bean for further using. But I can\'t autowire EntityManagerFactory, I can\
I'm not exactly sure why you want to expose both beans because as @chrylis points out, you can easily unwrap the EMF into a SF where needed.
// Some spring component
@Component
public class MyFancyComponent {
@PersistenceContext
private EntityManager entityManager;
public void doSomethingFancy() {
// public SessionFactory API
final SessionFactory sf = entityManager
.unwrap( Session.class ).getFactory();
// public SessionFactoryImplementor SPI
final SessionFactoryImplementor sfi = entityManager
.unwrap( SessionImplementor.class ).getFactory();
}
}
When you say
But I can't autowire EntityManagerFactory
does it fail to compile or throw an exception at run-time? If the latter, what does the stack-trace say?
One possible solution/work around might be to inject an em into the configuration instead of the em factory, using the @PersistenceContext
annotation:
@Configuration
@EnableTransactionManagement
public class DatabaseConfiguration {
@PersistenceContext
private EntityManager entityManager;
@Bean
public SessionFactory getSessionFactory() {
// no need to check for null here because if the unwrap fails, it will do
// so by throwing a PersistenceException rather than returning null.
return entityManager.unwrap( Session.class ).getFactory();
}
}