2016-11-19 3 views
3

Я настроил загрузку весны с встроенной БД HSQL для приложения.org.hibernate.HibernateException: No CurrentSessionContext настроен с использованием HSQL DB

Но я не могу использовать sessionFactory.getCurrentSession(), пока не настроен текущий сеанс.

зависимости POM

<dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-jpa</artifactId> 
    </dependency> 
    <!-- database --> 
    <dependency> 
     <groupId>org.hsqldb</groupId> 
     <artifactId>hsqldb</artifactId> 
    </dependency> 

DBCONFIG

@Configuration 
@EnableTransactionManagement 
public class DatabaseConfig { 
    @Bean 
    @Primary 
    public DataSource dataSource() { 
     final SimpleDriverDataSource dataSource = new SimpleDriverDataSource(); 
     dataSource.setDriver(new org.hsqldb.jdbcDriver()); 
     dataSource.setUrl("jdbc:hsqldb:db/HSQL_DB/app;shutdown=true"); 
     dataSource.setUsername("sa"); 
     dataSource.setPassword("sa"); 
     return dataSource; 
    } 

    @Bean 
    public JpaVendorAdapter jpaVendorAdapter() { 
     HibernateJpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter(); 
     jpaVendorAdapter.setGenerateDdl(true); 
     jpaVendorAdapter.setShowSql(true); 
     jpaVendorAdapter.setDatabasePlatform("org.hibernate.dialect.HSQLDialect"); 
     return jpaVendorAdapter; 
    } 

    @Bean 
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() { 
     LocalContainerEntityManagerFactoryBean lef = new LocalContainerEntityManagerFactoryBean(); 
     lef.setPackagesToScan("com.gvj.samanolsavam.entity"); 
     lef.setDataSource(dataSource()); 
     lef.setJpaVendorAdapter(jpaVendorAdapter()); 
     Properties properties = new Properties(); 
     properties.setProperty("hibernate.show_sql", "true"); 
     properties.setProperty("hibernate.jdbc.fetch_size", "100"); 
     properties.setProperty("hibernate.hbm2ddl.auto", ""); 
     lef.setJpaProperties(properties); 
     return lef; 
    } 


    @Bean 
    public SessionFactory sessionFactory(HibernateEntityManagerFactory hemf){ 
     return hemf.getSessionFactory(); 
    } 

} 

И у меня есть авто-проводные сессионный завод и использовать эту сессионную фабрику для текущей сессии.

@Autowired 
    private SessionFactory sessionFactory; 

public Session getSession() { 
      return sessionFactory.getCurrentSession(); 
    } 

Исключение

Caused by: org.springframework.orm.jpa.JpaSystemException: No CurrentSessionContext configured!; nested exception is org.hibernate.HibernateException: No CurrentSessionContext configured! 
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:314) 
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:222) 
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:436) 
    at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:59) 
    at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213) 
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:147) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) 
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281) 
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208) 
    at com.sun.proxy.$Proxy56.findByUserNameAndPassword(Unknown Source) 
    at com.gvj.samanolsavam.services.impl.UserAccountServiceImpl.findByUserNameAndPassword(UserAccountServiceImpl.java:19) 
    at com.gvj.samanolsavam.controller.LoginController.onLoginClick(LoginController.java:91) 
    ... 58 more 
Caused by: org.hibernate.HibernateException: No CurrentSessionContext configured! 
    at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:1012) 
    at com.gvj.samanolsavam.repository.impl.GenericDAOImpl.getSession(GenericDAOImpl.java:68) 
    at com.gvj.samanolsavam.repository.impl.UserAccountRepositoryImpl.findByUserNameAndPassword(UserAccountRepositoryImpl.java:20) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:302) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) 
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136) 
    ... 67 more 
+0

Ваш метод - вызов в @transactional? –

+0

Да, я добавил транзакцию на уровне класса сервиса. – boycod3

ответ

1

для использования getCurrentSession добавить current_session_context_class в вашей конфигурации , если вы не используете пользовательский конфиг этот конфиг в порядке, но вы добавить

properties.setProperty("hibernate.current_session_context_class", "org.springframework.orm.hibernate5.SpringSessionContext"); 

в application.yml jpa:

 properties: 
      hibernate: 
       dialect : org.hibernate.dialect.MySQL5Dialect 
       show_sql : true 
       current_session_context_class: org.springframework.orm.hibernate5.SpringSessionContext 
+0

Не работает одинаковые ошибки – boycod3

+0

properties.setProperty ("hibernate.current_session_context_class", "org.springframework.orm.hibernate5.SpringSessionContext"); Только избегайте пространства между hibernate.current и он работает – Dan

+0

@ boycod3 снова проверьте –

Смежные вопросы