2015-08-06 5 views
0

Я новичок в Spring и Hibernate. Я получаю Нет сеанса для текущей проблемы с потоком. Я пробовал искать другую тему здесь, но не способен решить мою проблему.Ошибка обработки запроса; Вложенное исключение - org.hibernate.HibernateException: сеанс не найден для текущего потока

Возможно, мне недостает некоторой концепции. Пожалуйста, сделайте . Помогите понять, в чем причина и как разрешить и пожалуйста. игнорировать мое форматирование, я тоже новичок в stackoverflow. Спасибо в заранее.

hibernate.config.xml

<!-- Scan classpath for annotations (eg: @Service, @Repository etc) --> 
<context:annotation-config/> 

<bean 
     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="location"> 
     <value>classpath:database.properties</value> 
    </property> 
</bean> 

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
     p:driverClassName="${jdbc.driverClassName}" p:url="${jdbc.url}" 
     p:username="${jdbc.username}" p:password="${jdbc.password}"/> 


<bean id="mySessionFactory" 
     class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource"/> 
    <property name="packagesToScan" value="com.shop.model"/> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">${hibernate.dialect}</prop> 
      <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> 

     </props> 
    </property> 
</bean> 
<tx:annotation-driven proxy-target-class="true" 
         transaction-manager="txManager"/> 
<bean id="transactionManager" 
     class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="mySessionFactory"/> 
</bean> 

UserDaoImpl Класс

package com.shop.dao.impl; 

@Repository 
public class UserDaoImpl implements IUserDao { 

    private static final Logger LOG = 
      Logger.getLogger(UserDaoImpl.class); 

    @Autowired 
    private SessionFactory sessionFactory; 

    @Override 
    public boolean checkUser(String email, String password) { 
     boolean userFound = false; 
     String hql = "from UserInfo where email =? and password=?"; 
     LOG.info(sessionFactory.getCurrentSession().createQuery(hql)); 
     Query query = sessionFactory.getCurrentSession().createQuery(hql); 
     query.setParameter(0, email); 
     query.setParameter(1, password); 
     List userList = query.list(); 

     if ((userList != null) && (userList.size() 0)){ 
      userFound = true; 
     } 
     return userFound; 
    } 

} 

ответ

0
метод

Использование openSession из SessionFactory перед созданием запроса:

Session session = sessionFactory.openSession(); 
Query query = session.createQuery(hql); 

Не Fo rget, чтобы закрыть сеанс после завершения вашей работы.

+0

спасибо .... это означает, что каждый раз приходится открывать и закрывать сеанс, как я знаю, контейнер обрабатывает это для нас неявно. Другим способом является <свойство \t \t name = "sessionFactory" ref = "sessionFactory" /> 'Настройка этого параметра в спящем режиме. config.xml работает правильно, и не нужно открывать и закрывать ресурсы. он отлично работает с тем же кодом. Мне просто нужно сделать аннотацию. Пожалуйста, поправьте меня, где я ошибаюсь. –

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

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