2015-03-24 11 views
5

Sto tentando di accedere alla factory di sessione di Hibernate ma sto ricevendo il seguente errore nella riga menzionata.Access SessionFactory da Spring Boot Application

No CurrentSessionContext configured! 

codice

@Service 
@Transactional 
public class GenericSearchImpl implements GenericSearch { 

    @Autowired 
    private EntityManagerFactory entityManagerFactory; 

    @Override 
    @SuppressWarnings("unchecked") 
    public <T> List<T> search(final Class<T> type, final String[] criteriaList, final int page, final int perPage) { 
     Session session = getSession(); 
     ... 
    } 

    public Session getSession() { 
     final HibernateEntityManagerFactory emFactory = (HibernateEntityManagerFactory) entityManagerFactory; 
     final SessionFactory sessionFactory = emFactory.getSessionFactory(); 
     return sessionFactory.getCurrentSession(); //ERROR No CurrentSessionContext configured! 

      //This worked but I understand it to be BAD as spring should be managing open sessions. 
      //  try { 
      //   return sessionFactory.getCurrentSession(); 
      //  } catch (Exception e) { 
      //   return sessionFactory.openSession(); 
      //  } 
    } 

    ... 

} 

Qualsiasi idea del perché?

+0

APP non utilizzare la classe 'CurrentSessionContext'. La sua configurazione dovrebbe risolvere il tuo problema. Aggiungi semplicemente la configurazione per il contesto di sessione corrente e lascia che punti alla classe 'org.springframework.orm.hibernate4.SpringSessionContext'. Comunque perché stai provando questo? Perché non usare il semplice JPA? –

+0

@ M.Deinum Sto facendo questo per supportare alcuni codici legacy che utilizzano i Criteri di ibernazione. Alla fine verrà convertito in JPA. Il resto dell'applicazione utilizza spring-data-jpa, ho solo bisogno di Hibernate SessionFactory temporaneamente finché non può essere riscritto. Un approccio ibrido come questo funziona? Puoi dare un esempio di configurazione di CurrentSessionContext come bean spring in java config? – jax

+0

È [questo] (http://stackoverflow.com/questions/26667910/no-currentsessioncontext-configured?answertab=active#tab-top) cosa intendi? – jax

risposta

7

Nel file di proprietà,

spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext 

nella classe di configurazione

@Bean 
public HibernateJpaSessionFactoryBean sessionFactory() { 
    return new HibernateJpaSessionFactoryBean(); 
} 

Quindi è possibile autowire

@Autowired 
private SessionFactory sessionFactory; 

Facciamo questo come boot primavera non Configurazione automatica hibernate sessinoFactory.

+0

thxx, ha aiutato molto – Janiiik

1

È possibile accedere SessionFactory con il metodo unwrap EntityManagerFactory invece di HibernateJpaSessionFactoryBean

SessionFactory sessionFactory = entityManagerFactory.unwrap(SessionFactory.class); 

HibernateJpaSessionFactoryBean è deprecato in primavera Boot 1.5.8